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 :
SELECT p.ParentId, COUNT(c.ChildId) FROM ParentTable p LEFT OUTER JOIN ChildTable c ON p.ParentId = c.ChildParentId GROUP BY p.ParentId
Convertissez cette requête en LINQ to SQL en suivant les étapes suivantes :
Join
et DefaultIfEmpty
: 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() }
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 :
select new { ParentId = grouped.Key, Count = grouped.Where(t => t.ChildId != null).Count() }
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!