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 = 17
condition fait-elle partie de JOIN plutôt que de la clause WHERE? Parce qu'il f
peut 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.