LINQ to SQL : jointure à gauche, regroupement par et nombre
Cet exemple montre comment effectuer une opération de jointure à gauche, de regroupement et de comptage à l'aide de LINQ to SQL, reflétant la fonctionnalité d'une requête SQL spécifique.
La requête SQL :
La requête SQL suivante sert de cible pour la traduction LINQ :
<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>
Cette requête joint ParentTable
et ChildTable
, compte les enregistrements enfants pour chaque parent et gère les cas où un parent n'a pas d'enfants (en utilisant un LEFT OUTER JOIN
).
L'équivalent LINQ to SQL :
La requête LINQ to SQL équivalente utilise une clause join
, DefaultIfEmpty()
pour le comportement de jointure à gauche, group by
, et une méthode Count()
avec un prédicat pour ne compter que les ID enfants non nuls :
<code class="language-csharp">var query = 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, ChildCount = grouped.Count(t => t.ChildId != null) };</code>
Cette requête LINQ obtient le même résultat que la requête SQL. La combinaison into j1
et from j2 in j1.DefaultIfEmpty()
implémente correctement la jointure externe gauche. La clause group by
regroupe les résultats par ParentId
, et la méthode Count()
, en utilisant une condition (t => t.ChildId != null
), garantit que seuls les enregistrements enfants existants sont comptés. Le type anonyme new { ParentId, ChildCount }
crée l'ensemble de résultats final.
Cela traduit de manière claire et concise la logique de la requête SQL en une expression LINQ lisible et maintenable.
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!