Maison > développement back-end > C++ > Quelle est la différence entre les méthodes Join et GroupJoin de LINQ ?

Quelle est la différence entre les méthodes Join et GroupJoin de LINQ ?

Barbara Streisand
Libérer: 2025-01-22 12:37:10
original
175 Les gens l'ont consulté

What's the Difference Between LINQ's Join and GroupJoin Methods?

Comparaison de Join et GroupJoin dans LINQ to Entities

Comprendre l'adhésion à un groupe

GroupJoin, comme Join, est une méthode LINQ permettant de combiner plusieurs sources de données. Cependant, GroupJoin produit des résultats avec une structure différente de celle de Join.

Rejoindre :

  • Effectuez une jointure interne et générez uniquement les lignes où il y a des correspondances dans les deux tables jointes.
  • Résultat : Un tableau fusionné contenant les colonnes des deux tableaux.

Rejoindre un groupe :

  • Effectuez une jointure externe pour faire correspondre les lignes du premier tableau avec les lignes du deuxième tableau.
  • Résultat : Une collection de groupes, où chaque groupe contient une ligne du premier tableau et sa ligne correspondante du deuxième tableau (ou une liste vide si aucune correspondance n'existe).

Grammaire

Syntaxe de requête :

Rejoindre :

<code>from p in Parent
join c in Child on p.Id equals c.Id
select new { p.Value, c.ChildValue }</code>
Copier après la connexion

Rejoindre le groupe :

<code>from p in Parent
join c in Child on p.Id equals c.Id into g
select new { Parent = p, Children = g }</code>
Copier après la connexion

Syntaxe de la méthode (moins couramment utilisée) :

Rejoindre :

<code>Parent.Join(Child, p => p.Id, c => c.Id, (p, c) => new { p.Value, c.ChildValue })</code>
Copier après la connexion

Rejoindre le groupe :

<code>Parent.GroupJoin(Child, p => p.Id, c => c.Id, (p, c) => new { Parent = p, Children = c })</code>
Copier après la connexion

Cas d'utilisation

1. Générer une connexion extérieure plate :

  • GroupJoin peut être utilisé pour créer une jointure externe aplatie qui contient chaque ligne de la première table, même s'il n'y a aucune ligne correspondante dans la deuxième table. Ceci est réalisé en aplatissant le groupe :
<code>from p in Parent
join c in Child on p.Id equals c.Id into g
from c in g.DefaultIfEmpty()
select new { Parent = p.Value, Child = c?.ChildValue }</code>
Copier après la connexion

2. Gardez l'ordre :

  • Join peut être utilisé pour filtrer une liste tout en conservant l'ordre des éléments. En utilisant une séquence externe comme première liste, vous pouvez conserver l'ordre des éléments de la deuxième liste :
<code>from id in ids
join p in parents on id equals p.Id
select p</code>
Copier après la connexion

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