Maison >développement back-end >C++ >Comment les méthodes d'extension peuvent-elles simplifier les jointures externes gauche dans LINQ?
Utilisation de la méthode d'extension de jointure externe gauche de LINQ
L'exécution de jointures externes dans LINQ peut être réalisée en utilisant une combinaison des méthodes Join
et DefaultIfEmpty
. Cependant, pour améliorer la lisibilité et la simplicité du code, les méthodes d’extension offrent un moyen plus pratique d’exprimer ces opérations.
Utilisez des méthodes d'extension pour effectuer des jointures externes gauches, considérez la syntaxe suivante :
<code class="language-csharp">Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ...) .Select(...)</code>
Dans cette syntaxe :
GroupJoin
Regroupe les éléments de la première séquence (Foo) selon un sélecteur à clé et le joint à la deuxième séquence (Bar) à l'aide d'un sélecteur à clé compatible. SelectMany
permet d'aplatir les éléments groupés et de les combiner avec la première séquence. DefaultIfEmpty
est utilisé pour garantir que s'il n'y a aucun élément correspondant dans la deuxième séquence, une valeur par défaut est renvoyée. Pour terminer la jointure externe gauche, les étapes restantes consistent à effectuer une sélection sur les éléments combinés. Dans ce cas, la méthode Select
peut être utilisée pour projeter les propriétés souhaitées de chaque tuple.
Par exemple, pour exprimer une jointure externe gauche entre Foo et Bar basée sur la colonne Foo_Id, vous pouvez utiliser le code suivant :
<code class="language-csharp">var qry = Foo.GroupJoin( Bar, foo => foo.Foo_Id, bar => bar.Foo_Id, (x,y) => new { Foo = x, Bars = y }) .SelectMany( x => x.Bars.DefaultIfEmpty(), (x,y) => new { Foo=x.Foo, Bar=y});</code>
Ce code génère une collection énumérable de types anonymes, où chaque type contient une propriété Foo de la table Foo et une propriété Bar de la table Bar (ou null si aucune barre correspondante n'existe).
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!