Ho il seguente SQL, che sto cercando di tradurre in 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
Ho visto l'implementazione tipica del join esterno sinistro (ad es. into x from y in x.DefaultIfEmpty()
Ecc . ) Ma non sono sicuro di come introdurre l'altra condizione del join ( AND f.otherid = 17
)
MODIFICARE
Perché la AND f.otherid = 17
condizione fa parte di JOIN anziché nella clausola WHERE? Perché f
potrebbe non esistere per alcune righe e voglio ancora che queste righe vengano incluse. Se la condizione viene applicata nella clausola WHERE, dopo JOIN - non ottengo il comportamento che desidero.
Purtroppo questo:
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
sembra essere equivalente a questo:
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
che non è proprio quello che sto cercando.