Maison >développement back-end >C++ >Comment compter avec précision les enregistrements enfants dans une jointure gauche LINQ avec regroupement ?
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!