Heim >Backend-Entwicklung >C++ >Wie zähle ich untergeordnete Datensätze in einem LINQ Left Join mit Gruppierung genau?
LINQ beherrschen: Genaue Anzahl untergeordneter Datensätze in Left Joins mit Gruppierung
Das Übersetzen von SQL-Abfragen in LINQ to SQL kann schwierig sein, insbesondere wenn es um komplexe Szenarien wie Linksverknüpfungen, Gruppierung und genaue Datensatzzählung geht. Dieses Beispiel zeigt, wie man untergeordnete Datensätze in einem Left-Join mit Gruppierung korrekt zählt und dabei häufige Fallstricke behebt.
Bedenken Sie diese SQL-Abfrage:
<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>
Eine naive LINQ-Übersetzung übersieht möglicherweise das entscheidende Detail der Behandlung von Nullwerten:
<code class="language-csharp">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, Count = grouped.Count() }</code>
Dieser Ansatz zählt fälschlicherweise Nullwerte. Die Lösung besteht darin, die Count()
-Methode so zu ändern, dass Null-ChildId
-Werte herausgefiltert werden:
<code class="language-csharp">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, Count = grouped.Count(t => t.ChildId != null) }</code>
Diese verfeinerte LINQ-Abfrage zählt genau nur Werte ungleich Null ChildId
und liefert die korrekte Anzahl untergeordneter Datensätze für jedes übergeordnete Element. Denken Sie daran, bei der Arbeit mit linken Verknüpfungen und Aggregatfunktionen in LINQ to SQL immer Nullen zu berücksichtigen, um die Datenintegrität sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie zähle ich untergeordnete Datensätze in einem LINQ Left Join mit Gruppierung genau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!