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
Libérer: 2025-01-05 12:11:40
original
568 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal