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
Linda Hamiltonoriginal
2025-01-08 20:01:43593parcourir

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>

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>
  1. Regrouper les résultats par ID parent :
<code class="language-csharp">group j2 by p.ParentId into grouped</code>
  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>

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>

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!

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