Heim >Backend-Entwicklung >C++ >Wie führe ich mit LINQ einen Left Join durch, gruppiere nach und zähle Nicht-Null-untergeordnete Datensätze?
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:
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>
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
<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!