Heim >Backend-Entwicklung >C++ >Wie führe ich einen Left Join, eine Gruppierung nach und eine Zählung mit LINQ to SQL durch?
LINQ to SQL: Left Join, Group By und Count
Dieses Beispiel zeigt, wie Sie mithilfe von LINQ to SQL einen Linksverknüpfungs-, Gruppierungs- und Zählvorgang durchführen und dabei die Funktionalität einer bestimmten SQL-Abfrage widerspiegeln.
Die SQL-Abfrage:
Die folgende SQL-Abfrage dient als Ziel für die LINQ-Übersetzung:
<code class="language-sql">SELECT p.ParentId, COUNT(c.ChildId) FROM ParentTable p LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId GROUP BY p.ParentId</code>
Diese Abfrage verknüpft ParentTable
und ChildTable
, zählt untergeordnete Datensätze für jedes übergeordnete Element und behandelt Fälle, in denen ein übergeordnetes Element keine untergeordneten Elemente hat (unter Verwendung eines LEFT OUTER JOIN
).
Das LINQ to SQL-Äquivalent:
Die entsprechende LINQ to SQL-Abfrage verwendet eine join
-Klausel, DefaultIfEmpty()
für das Left-Join-Verhalten, group by
, und eine Count()
-Methode mit einem Prädikat, um nur untergeordnete IDs ungleich Null zu zählen:
<code class="language-csharp">var query = from p in context.ParentTable join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1 from j2 in j1.DefaultIfEmpty() group j2 by p.ParentId into grouped select new { ParentId = grouped.Key, ChildCount = grouped.Count(t => t.ChildId != null) };</code>
Diese LINQ-Abfrage erzielt das gleiche Ergebnis wie die SQL-Abfrage. Die Kombination into j1
und from j2 in j1.DefaultIfEmpty()
implementiert den linken äußeren Join korrekt. Die group by
-Klausel gruppiert die Ergebnisse nach ParentId
und die Count()
-Methode stellt mithilfe einer Bedingung (t => t.ChildId != null
) sicher, dass nur vorhandene untergeordnete Datensätze gezählt werden. Der anonyme Typ new { ParentId, ChildCount }
erstellt die endgültige Ergebnismenge.
Dadurch wird die Logik der SQL-Abfrage klar und prägnant in einen lesbaren und wartbaren LINQ-Ausdruck übersetzt.
Das obige ist der detaillierte Inhalt vonWie führe ich einen Left Join, eine Gruppierung nach und eine Zählung mit LINQ to SQL durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!