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
Libérer: 2025-01-08 20:31:55
original
333 Les gens l'ont consulté

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 :

SELECT p.ParentId, COUNT(c.ChildId)
FROM ParentTable p
LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId
GROUP BY p.ParentId
Copier après la connexion

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

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() }
Copier après la connexion

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 :

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) }
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal