LINQ to SQL - Linke äußere Verknüpfung mit mehreren Verknüpfungsbedingungen
Ich habe das folgende SQL, das ich versuche, in LINQ zu übersetzen:
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 der linken äußeren Verbindung gesehen (dh.into x from y in x.DefaultIfEmpty()
usw.), bin mir aber nicht sicher, wie ich die andere Join-Bedingung einführen soll (AND f.otherid = 17
)
BEARBEITEN
Warum ist derAND f.otherid = 17
Bedingungsteil des JOIN anstelle der WHERE-Klausel? weilf
existiert möglicherweise nicht für einige Zeilen und ich möchte weiterhin, dass diese Zeilen eingeschlossen werden. Wenn die Bedingung in der WHERE-Klausel nach dem JOIN angewendet wird, erhalte ich nicht das gewünschte Verhalten.
Leider ist dies:
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 dazu äquivalent 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 bin.