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)
ÉDITER
Pourquoi la AND f.otherid = 17condition fait-elle partie de JOIN plutôt que de la clause WHERE? Parce qu'il fpeut ne pas exister pour certaines lignes et je veux toujours que ces lignes soient incluses. Si la condition est appliquée dans la clause WHERE, après le JOIN - alors je n'obtiens pas le comportement souhaité.
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 équivalent à ceci:
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 n'est pas tout à fait ce que je recherche.