Maison >développement back-end >C++ >Comment effectuer une jointure à gauche, un regroupement et un comptage avec LINQ to SQL ?

Comment effectuer une jointure à gauche, un regroupement et un comptage avec LINQ to SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-08 20:17:49212parcourir

How to Perform a Left Join, Group By, and Count with LINQ to SQL?

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!

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