Maison > développement back-end > C++ > Comment effectuer une jointure à gauche, un regroupement par et un comptage des enregistrements enfants non nuls à l'aide de LINQ ?

Comment effectuer une jointure à gauche, un regroupement par et un comptage des enregistrements enfants non nuls à l'aide de LINQ ?

Linda Hamilton
Libérer: 2025-01-08 20:01:43
original
592 Les gens l'ont consulté

How to Perform a Left Join, Group By, and Count Non-Null Child Records using LINQ?

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 :

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

Convertissez cette requête en LINQ to SQL en suivant les étapes suivantes :

  1. Effectuez une jointure gauche en utilisant les méthodes Join et DefaultIfEmpty :
<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()</code>
Copier après la connexion
  1. Regrouper les résultats par ID parent :
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
Copier après la connexion
  1. Comptez le nombre d'enregistrements enfants associés à chaque enregistrement parent :
<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Count() }</code>
Copier après la connexion

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 :

<code class="language-csharp">select new { ParentId = grouped.Key, Count = grouped.Where(t => t.ChildId != null).Count() }</code>
Copier après la connexion

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!

source:php.cn
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