LINQ to SQL : implémentation d'une jointure externe gauche avec plusieurs conditions de jointure
LINQ to SQL permet la création de requêtes complexes à l'aide d'un C# syntaxe. Une tâche courante consiste à implémenter une jointure externe gauche avec plusieurs conditions de jointure.
Pour comprendre la nécessité d'inclure la condition de jointure dans l'instruction JOIN plutôt que dans la clause WHERE, considérez l'instruction SQL suivante :
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
Ici, même si la table de faits (f) ne comporte aucune ligne correspondant à une certaine période, nous voulons quand même que cette période soit incluse dans les résultats. Placer la condition de jointure supplémentaire dans la clause WHERE omettrait ces points des résultats.
La solution LINQ to SQL implique l'utilisation de la syntaxe de la méthode d'extension. L'extrait de code suivant montre comment :
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
Vous pouvez également 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
En plaçant la condition de jointure dans l'instruction JOIN, nous garantissons que seules les périodes avec un Les faits correspondants satisfaisant la condition otherid = 17 sont inclus dans les résultats, tout en effectuant une jointure externe gauche. Cette approche nous permet d'obtenir le comportement souhaité sans sacrifier les avantages de la jointure externe gauche.
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!