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 = 17
kondisi bagian dari GABUNGAN bukan dalam klausa WHERE? Karena f
mungkin 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.