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!