Saya memiliki SQL berikut, yang saya coba terjemahkan ke 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
Saya telah melihat implementasi tipikal dari gabungan luar kiri (mis. into x from y in x.DefaultIfEmpty()Dll . ) Tetapi saya tidak yakin bagaimana cara memperkenalkan kondisi gabungan lainnya ( AND f.otherid = 17)
EDIT
Mengapa AND f.otherid = 17kondisi bagian dari GABUNGAN bukan dalam klausa WHERE? Karena fmungkin tidak ada untuk beberapa baris dan saya masih ingin baris ini dimasukkan. Jika kondisi tersebut diterapkan dalam klausa WHERE, setelah GABUNG - maka saya tidak mendapatkan perilaku yang saya inginkan.
Sayangnya ini:
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
tampaknya setara dengan ini:
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
yang tidak cukup apa yang saya cari.