mam następujące SQL, który próbuję tłumaczyć do LINQ:LINQ to SQL - Left Outer Join z wieloma dołączyć warunki
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
Widziałem typowa realizacja lewe sprzężenie zewnętrzne (tj. into x from y in x.DefaultIfEmpty()
itd.), ale jestem pewien, w jaki sposób wprowadzić drugi dołączyć warunek (AND f.otherid = 17
)
EDIT
Dlaczego część AND f.otherid = 17
stan JOIN zamiast w klauzuli WHERE? Ponieważ f
może nie istnieć dla niektórych wierszy i nadal chcę, aby te wiersze zostały uwzględnione. Jeśli warunek zostanie zastosowany w klauzuli WHERE, po JOIN - wtedy nie otrzymam pożądanego zachowania.
Niestety to:
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
wydaje się być równoważne do tego:
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
który nie jest całkiem co jestem po.
Słodkie!Szukałem tego przez chwilę, ale nie byłem pewien, jak tego szukać. Nie wiesz, jak dodać tagi do tej odpowiedzi. Oto kryteria wyszukiwania, których użyłem: linq do filtra sql w połączeniu lub od linq do sql, gdzie klauzula w połączeniu lub od – Solburn