Maison >développement back-end >C++ >Comment effectuer une jointure à gauche, un regroupement par et un comptage des enregistrements enfants non nuls à l'aide de LINQ ?
Utilisez LINQ pour implémenter la jointure gauche, le regroupement et le comptage de sous-enregistrements non vides
En SQL, la requête suivante effectue une jointure gauche entre deux tables, ParentTable et ChildTable, et compte le nombre d'enregistrements enfants associés à chaque enregistrement parent :
<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>
Convertissez cette requête en LINQ to SQL en suivant les étapes suivantes :
Join
et DefaultIfEmpty
: <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>
Cependant, le code ci-dessus renverra le nombre total d'enregistrements enfants pour chaque enregistrement parent, y compris les valeurs nulles. Pour ne compter que les sous-enregistrements non vides, modifiez l'expression Count
comme suit :
<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Where(t => t.ChildId != null).Count() }</code>
Cela garantira que seuls les enregistrements enfants qui ChildId
ne sont pas vides sont comptés. La requête LINQ finale reflétera avec précision la logique de la requête SQL et comptera efficacement les sous-enregistrements non vides.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!