Ich habe die folgende SQL, die ich in LINQ übersetzen möchte:
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
Ich habe die typische Implementierung des linken äußeren Joins (dh into x from y in x.DefaultIfEmpty()
usw.) gesehen, bin mir aber nicht sicher, wie ich die andere Join-Bedingung einführen soll ( AND f.otherid = 17
)
BEARBEITEN
Warum ist die AND f.otherid = 17
Bedingung Teil von JOIN anstelle der WHERE-Klausel? Da f
für einige Zeilen möglicherweise nicht vorhanden ist und ich dennoch möchte, dass diese Zeilen enthalten sind. Wenn die Bedingung in der WHERE-Klausel nach dem JOIN angewendet wird, erhalte ich nicht das gewünschte Verhalten.
Leider das:
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
scheint gleichbedeutend damit zu sein:
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
Das ist nicht ganz das, wonach ich suche.