У мене є такий 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
)
EDIT
Чому AND f.otherid = 17
умова є частиною приєднання, а не в пункті WHERE? Тому що f
може не існувати для деяких рядків, і я все ще хочу, щоб ці рядки були включені. Якщо умова застосовується в пункті WHERE, після ПРИЄДНАЙТЕСЬ - тоді я не отримую потрібної мені поведінки.
На жаль це:
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
що не зовсім те, що я після цього.