J'ai le SQL suivant, que j'essaie de traduire en LINQ :
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
J'ai vu l'implémentation typique de la jointure externe gauche (c'est-à-dire. into x from y in x.DefaultIfEmpty()
etc.) mais je ne sais pas comment introduire l'autre condition de jointure ( AND f.otherid = 17
)
EDIT
Pourquoi le AND f.otherid = 17
dans la clause JOIN plutôt que dans la clause WHERE ? Parce que f
peut ne pas exister pour certaines lignes et je veux quand même que ces lignes soient incluses. Si la condition est appliquée dans la clause WHERE, après le JOIN, je n'obtiens pas le comportement que je souhaite.
Malheureusement, ceci :
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
semble être équivalente à celle-ci :
SELECT f.value
FROM period as p
LEFT OUTER JOIN facts AS f ON p.id = f.periodid
WHERE p.companyid = 100 AND f.otherid = 17
ce qui n'est pas tout à fait ce que je recherche.
0 votes
Super ! Je le cherchais depuis un moment mais je ne savais pas comment faire une recherche. Je ne sais pas comment ajouter des balises à cette réponse. Voici les critères de recherche que j'ai utilisé : linq to sql filter in join or from linq to sql where clause in join or from