Maison >développement back-end >C++ >Comment effectuer une jointure externe gauche LINQ to SQL avec plusieurs conditions de jointure ?

Comment effectuer une jointure externe gauche LINQ to SQL avec plusieurs conditions de jointure ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-05 12:11:40599parcourir

How to Perform a LINQ to SQL Left Outer Join with Multiple Join Conditions?

LINQ to SQL : jointure externe gauche avec plusieurs conditions de jointure

Dans LINQ to SQL, traduction de requêtes SQL impliquant des jointures externes gauches avec plusieurs jointures les conditions peuvent être difficiles. Cet article traite d'un scénario dans lequel une requête SQL avec une jointure externe gauche et une condition de jointure supplémentaire doit être convertie en LINQ.

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

Traduction LINQ
L'implémentation LINQ typique d'une jointure externe gauche utilisant DefaultIfEmpty() peut être simple, mais l'incorporation de la condition de jointure supplémentaire nécessite examen attentif.

La tentative initiale suivante, bien que syntaxiquement correcte, ne donne pas 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.DefaultIfEmpty()
where p.companyid == 100 && fgi.otherid == 17
select f.value

Pour obtenir le comportement souhaité, la condition de jointure supplémentaire doit être introduite avant d'appeler DefaultIfEmpty (). Ceci est accompli en utilisant soit la syntaxe de la méthode d'extension, soit une sous-requête :

Syntaxe de la méthode d'extension

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

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn