LINQ to SQL : amélioration des jointures externes gauches avec plusieurs conditions de jointure
Dans LINQ to SQL, les jointures externes gauches fournissent un mécanisme puissant pour combiner données provenant de plusieurs tables. Cependant, lorsqu'il s'agit de scénarios impliquant des conditions de jointure supplémentaires, il devient nécessaire d'explorer des techniques qui étendent l'approche standard.
Considérez la requête SQL :
SELECT f.value FROM period as p LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17 WHERE p.companyid = 100
Cette requête cherche à récupérer des données de les tables 'period' et 'facts', en appliquant une jointure externe gauche sur les colonnes 'id' et 'periodid'. De plus, il inclut une autre condition de jointure, « f.otherid = 17 », pour filtrer les résultats.
Dans LINQ to SQL, l'implémentation typique d'une jointure externe gauche implique l'utilisation de la méthode « DefaultIfEmpty() » . Cependant, pour tenir compte de la condition de jointure supplémentaire, nous devons modifier notre approche.
La requête LINQ suivante obtient le résultat souhaité :
from p in context.Periods join f in context.Facts on p.id equals f.periodid into fg from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty() where p.companyid == 100 select f.value
Ici, nous introduisons la condition de jointure supplémentaire dans le Clause '.Where()', garantissant que la sélection des lignes du groupe 'fg' est filtrée en fonction de 'f.otherid = 17'.
Alternativement, nous pourrions utiliser une sous-requête :
from p in context.Periods join f in context.Facts on p.id equals f.periodid into fg from fgi in (from f in fg where f.otherid == 17 select f).DefaultIfEmpty() where p.companyid == 100 select f.value
Les deux approches effectuent avec succès une jointure externe gauche tout en appliquant la condition de jointure supplémentaire, permettant une récupération plus ciblée des données.
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!