Heim >Backend-Entwicklung >C++ >Wie zähle ich untergeordnete Datensätze in einem LINQ Left Join mit Gruppierung genau?

Wie zähle ich untergeordnete Datensätze in einem LINQ Left Join mit Gruppierung genau?

Barbara Streisand
Barbara StreisandOriginal
2025-01-08 20:31:55283Durchsuche

How to Accurately Count Child Records in a LINQ Left Join with Grouping?

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!

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