次の 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
編集
AND f.otherid = 17
条件部分が WHERE 句ではなく JOIN の部分になっているのはなぜですか? 一部の行が存在しない可能性があるため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
これは私が求めているものではありません。