Heim >Backend-Entwicklung >C++ >Wie führe ich einen Left Join, eine Gruppierung nach und eine Zählung mit LINQ to SQL durch?

Wie führe ich einen Left Join, eine Gruppierung nach und eine Zählung mit LINQ to SQL durch?

Linda Hamilton
Linda HamiltonOriginal
2025-01-08 20:17:49212Durchsuche

How to Perform a Left Join, Group By, and Count with LINQ to SQL?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn