У меня есть следующие SQL, которые я пытаюсь перевести LINQ:LINQ к SQL - левое внешнее соединение с несколькими условиями соединения
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
)
EDIT
Почему 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
, который не совсем то, что я после.
Sweet!Я искал это некоторое время, но не знал, как это искать. Не знаете, как добавить теги к этому ответу. Вот критерии поиска, которые я использовал: linq to sql filter в join или от linq to sql where clause in join или от – Solburn