Maison >développement back-end >C++ >Comment effectuer une jointure extérieure gauche dans LINQ sans utiliser de clauses de jointure sur l'équilibre?
c # linq join extérieur gauche: une approche alternative
Cet article montre comment effectuer une jointure extérieure gauche dans LINQ aux objets sans utiliser la clause traditionnelle join-on-equals-into
. Nous tirons parti des opérateurs from
et join
en conjonction avec DefaultIfEmpty()
pour une solution concise et efficace.
Voici la syntaxe alternative:
<code class="language-csharp">var q = from l in lefts join r in rights on l.Key equals r.Key into ps_jointable from p in ps_jointable.DefaultIfEmpty() select new JoinPair { LeftId = l.Id, RightId = p?.Id ?? 0 };</code>
Cette requête LINQ exécute une jointure extérieure gauche sur les collections lefts
et rights
, générant une nouvelle collection d'objets JoinPair
. Pour chaque élément de lefts
, il tente de trouver un élément correspondant dans rights
basé sur la propriété Key
. Si une correspondance existe, RightId
dans JoinPair
tiendra le Id
de l'élément de rights
correspondant. Si aucune correspondance n'est trouvée, RightId
par défaut est 0 en utilisant l'opérateur de conditionnement nulle (?.
) et l'opérateur de coalescing null (??
).
La méthode DefaultIfEmpty()
est essentielle. Il garantit qu'un résultat est produit même lorsqu'aucune correspondance n'est trouvée dans la collection rights
. En l'absence d'une correspondance, DefaultIfEmpty()
renvoie une valeur par défaut (null dans ce cas), qui est ensuite gérée gracieusement par les opérateurs nulle-conditionnelle et nul coalscing. Cette approche fournit une alternative plus lisible et potentiellement plus performante à la syntaxe standard join-on-equals-into
pour les jointures externes gauche dans linq.
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!