Heim > Backend-Entwicklung > C++ > Wie kann man untergeordnete Datensätze in einem LINQ Left Join und Group By genau zählen?

Wie kann man untergeordnete Datensätze in einem LINQ Left Join und Group By genau zählen?

DDD
Freigeben: 2025-01-08 20:21:56
Original
938 Leute haben es durchsucht

How to Accurately Count Child Records in a LINQ Left Join and Group By?

LINQ – Tipps für Linksverknüpfungen, Gruppierung und präzises Zählen

Das Konvertieren komplexer SQL-Abfragen in LINQ to SQL kann manchmal schwierig sein. Ein typisches Beispiel besteht darin, einen Left-Join durchzuführen, nach Spalte zu gruppieren und die Anzahl der Datensätze zu zählen, die eine bestimmte Bedingung erfüllen.

Betrachten Sie die folgende 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>
Nach dem Login kopieren

Diese Abfrage ruft die ParentId und die entsprechende ChildId-Anzahl aus zwei Tabellen ab, ParentTable und ChildTable.

Um dies in LINQ to SQL zu konvertieren, führen Sie zunächst einen linken Join aus:

<code class="language-csharp">from p in context.ParentTable
join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1</code>
Nach dem Login kopieren

Allerdings muss mit dem COUNT(c.ChildId) Teil vorsichtig umgegangen werden. Ohne besondere Überlegungen gibt LINQ-generiertes SQL immer COUNT(*) zurück, was möglicherweise nicht die erwarteten Ergebnisse liefert.

Um nur übereinstimmende ChildId-Werte genau zu zählen, fügen Sie nach der into-Klausel Folgendes hinzu:

<code class="language-csharp">from j2 in j1.DefaultIfEmpty()</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass j2 ein Nullwert zugewiesen wird, wenn kein passender untergeordneter Datensatz gefunden wird.

Führen Sie abschließend die Gruppierung und Zählung durch:

<code class="language-csharp">group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count(t => t.ChildId != null) }</code>
Nach dem Login kopieren

Dieser Code gruppiert nach ParentId und zählt nur Datensätze, deren ChildId nicht leer ist. Das Ergebnis ist ein Objekt mit den Eigenschaften ParentId und Count, das dem Format der ursprünglichen SQL-Abfrage entspricht. Dies stellt sicher, dass wir nur die Fälle zählen, in denen Unterdatensätze vorhanden sind, und vermeidet Nullwerte, die durch Linksverknüpfungen verursacht werden und die Genauigkeit der Zählergebnisse beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWie kann man untergeordnete Datensätze in einem LINQ Left Join und Group By genau zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage