Eu tenho o seguinte SQL, que estou tentando traduzir para 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
Vi a implementação típica da junção externa esquerda (por exemplo, into x from y in x.DefaultIfEmpty()
etc.), mas não tenho certeza de como introduzir a outra condição de junção ( AND f.otherid = 17
)
EDITAR
Por que a AND f.otherid = 17
condição faz parte do JOIN em vez da cláusula WHERE? Porque f
pode não existir para algumas linhas e eu ainda quero que essas linhas sejam incluídas. Se a condição for aplicada na cláusula WHERE, após a junção - então não recebo o comportamento que desejo.
Infelizmente isso:
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
parece ser equivalente a isso:
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
o que não é exatamente o que estou procurando.