У меня есть следующий SQL, который я пытаюсь перевести на 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
Я видел типичную реализацию левого внешнего соединения (т. Е. И т. into x from y in x.DefaultIfEmpty()
Д.), Но не уверен, как ввести другое условие соединения ( AND f.otherid = 17
)
РЕДАКТИРОВАТЬ
Почему AND f.otherid = 17
условие является частью JOIN, а не предложением WHERE? Потому что f
может не существовать для некоторых строк, и я все еще хочу, чтобы эти строки были включены. Если условие применяется в предложении WHERE, после JOIN - тогда я не получаю нужное мне поведение.
К сожалению это:
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
кажется эквивалентным этому:
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
что не совсем то, что я после.