2011-01-17 7 views
0

Kann jemand bitte bei der Umwandlung der folgenden sql zu Linq in C# helfen?SQL zu Linq Konvertierung mit Kreuz verbinden

select s.SYSTEM_NAME, 
     r.RESET_CODE, 
     COUNT(v.reset_code) 
    from (select distinct system_name 
      from tbl) s 
cross join (select distinct reset_code 
       from tbl) r 
left join tbl v on v.SYSTEM_NAME = s.SYSTEM_NAME 
       and v.RESET_CODE=r.RESET_CODE 
group by s.SYSTEM_NAME,r.RESET_CODE 

Antwort

2

Kreuz verbindet als mehr von Klauseln in einem Abfrage-Ausdruck oder einen Aufruf von Select in Erweiterungsmethode Syntax allgemein dargestellt.

So ist der erste Teil Ihrer Abfrage könnte sein:

var query = from systemName in db.Table.Select(x => x.SystemName).Distinct() 
      from resetCode in db.Table.Select(x => x.ResetCode).Distinct() 
      ... 

Linke Außen sind Joins in der Regel mit einem "join ... in ..." -Abfrage, möglicherweise wie folgt dargestellt:

var query = from systemName in db.Table.Select(x => x.SystemName).Distinct() 
      from resetCode in db.Table.Select(x => x.ResetCode).Distinct() 
      join tmp in db.Table on 
       new { ResetCode = resetCode, SystemName = systemName } 
       equals new { tmp.ResetCode, tmp.SystemName } 
       into tmpGroup 
      select new { ResetCode = resetCode, 
         SystemName = systemName, 
         Count = tmpGroup.Count() }; 

Ich bin nicht sicher über den Count Teil, um ehrlich zu sein ... Ich bin nicht 100% sicher, was die COUNT(v.ResetCode) in Ihrem ursprünglichen SQL tut.

+0

Vielen Dank. Es hat mein Problem gelöst. Ich fügte den Spaltennamen im count() hinzu, um 0 für fehlende resetcodes zu haben. Die linq-Abfrage zeigt mir die Ergebnisse korrekt an. Aber wird niot mit Gruppe durch einen Einfluss haben? nur neugierig zu wissen, welche Rolle es tatsächlich spielt .. – Sasi

+0

@Sasi: Sie führen eine "Gruppe von" Operation mit der "Join ... in" -Operation, effektiv. Es verwendet den GroupJoin LINQ-Abfrageoperator. –