Atteindre les jointures externes gauche dans LINQ en utilisant des méthodes d'extension
LINQ propose plusieurs façons d'effectuer une jointure extérieure gauche, une opération cruciale pour combiner les données de deux tables basées sur une clé partagée. Bien que le mot-clé join
soit couramment utilisé, des méthodes d'extension comme GroupJoin
et SelectMany
fournissent une approche alternative.
Cet exemple montre comment traduire une jointure extérieure gauche traditionnelle dans une syntaxe plus fluide en utilisant des méthodes d'extension:
<code class="language-csharp">// Left outer join using extension methods var qry = Foo.GroupJoin( Bar, // The second table to join with foo => foo.Foo_Id, // Key selector for the 'Foo' table bar => bar.Foo_Id, // Key selector for the 'Bar' table (x, y) => new // Anonymous type to hold results { Foo = x, // Represents the 'Foo' table entry Bars = y // Represents the matching entries from 'Bar' (or empty if no match) }) .SelectMany( x => x.Bars.DefaultIfEmpty(), // Handles cases where there's no match in 'Bar' (x, y) => new // Anonymous type for final result { Foo = x.Foo, // 'Foo' table entry Bar = y // 'Bar' table entry (might be null if no match) });</code>
Ce code atteint le même résultat qu'une jointure extérieure gauche basée à base join
. GroupJoin
regroupe les éléments de Foo
avec leurs correspondances correspondantes de Bar
. SelectMany
Flattens ces groupes, en utilisant DefaultIfEmpty()
pour s'assurer que même les entrées Foo
sans une correspondance Bar
sont incluses, avec une valeur nulle pour la propriété Bar
dans le type anonyme résultant. Cela produit efficacement l'ensemble de résultats de jointure extérieure gauche complète.
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!