Maison >développement back-end >C++ >Comment compter avec précision les enregistrements enfants dans une jointure gauche LINQ avec regroupement ?

Comment compter avec précision les enregistrements enfants dans une jointure gauche LINQ avec regroupement ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-08 20:31:55283parcourir

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

Maîtriser LINQ : décompte précis des enregistrements enfants dans les jointures gauches avec regroupement

La traduction de requêtes SQL en LINQ to SQL peut s'avérer délicate, en particulier lorsqu'il s'agit de scénarios complexes tels que les jointures à gauche, le regroupement et le comptage précis des enregistrements. Cet exemple montre comment compter correctement les enregistrements enfants dans une jointure gauche avec regroupement, en résolvant les pièges courants.

Considérez cette requête SQL :

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

Une traduction naïve de LINQ pourrait négliger le détail crucial de la gestion des valeurs nulles :

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

Cette approche compte incorrectement les valeurs nulles. La solution réside dans la modification de la méthode Count() pour filtrer les valeurs ChildId nulles :

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

Cette requête LINQ affinée ne compte avec précision que les valeurs ChildId non nulles, fournissant le nombre d'enregistrements enfants correct pour chaque parent. N'oubliez pas de toujours tenir compte des valeurs nulles lorsque vous travaillez avec des jointures gauches et des fonctions d'agrégation dans LINQ to SQL pour garantir l'intégrité des données.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn