Heim >Backend-Entwicklung >C++ >Wie führe ich mit LINQ einen Left Join durch, gruppiere nach und zähle Nicht-Null-untergeordnete Datensätze?

Wie führe ich mit LINQ einen Left Join durch, gruppiere nach und zähle Nicht-Null-untergeordnete Datensätze?

Linda Hamilton
Linda HamiltonOriginal
2025-01-08 20:01:43561Durchsuche

How to Perform a Left Join, Group By, and Count Non-Null Child Records using LINQ?

Verwenden Sie LINQ, um Left Join, Gruppierung und Zählung nicht leerer Unterdatensätze zu implementieren

In SQL führt die folgende Abfrage eine Linksverknüpfung zwischen zwei Tabellen, ParentTable und ChildTable, durch und zählt die Anzahl der untergeordneten Datensätze, die jedem übergeordneten Datensatz zugeordnet sind:

<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>

Konvertieren Sie diese Abfrage mit den folgenden Schritten in LINQ to SQL:

  1. Führen Sie einen Left Join mit den Methoden Join und DefaultIfEmpty durch:
<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()</code>
  1. Ergebnisse nach Eltern-ID gruppieren:
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
  1. Zählen Sie die Anzahl der untergeordneten Datensätze, die jedem übergeordneten Datensatz zugeordnet sind:
<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Count() }</code>

Der obige Code gibt jedoch die Gesamtzahl der untergeordneten Datensätze für jeden übergeordneten Datensatz zurück, einschließlich Nullwerten. Um nur nicht leere Unterdatensätze zu zählen, ändern Sie den Count-Ausdruck wie folgt:

<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Where(t => t.ChildId != null).Count() }</code>

Dadurch wird sichergestellt, dass nur untergeordnete Datensätze gezählt werden, die ChildId nicht leer sind. Die endgültige LINQ-Abfrage spiegelt die Logik der SQL-Abfrage genau wider und zählt effektiv nicht leere Unterdatensätze.

Das obige ist der detaillierte Inhalt vonWie führe ich mit LINQ einen Left Join durch, gruppiere nach und zähle Nicht-Null-untergeordnete Datensätze?. 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