LINQ to SQL: 複数の結合条件を使用した左外部結合
LINQ to SQL で、複数の結合を使用した左外部結合を含む SQL クエリを変換する状況は困難になる可能性があります。この記事では、左外部結合と追加の結合条件を含む SQL クエリを LINQ に変換する必要があるシナリオについて説明します。
SQL クエリ
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
LINQ 変換
DefaultIfEmpty() を使用した左外部結合の一般的な LINQ 実装は、次のようになります。簡単ですが、追加の結合条件を組み込むには慎重な検討が必要です。
次の最初の試行は、構文的には正しいですが、望ましい結果は得られません。
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
望ましい動作を達成するには、 DefaultIfEmpty() を呼び出す前に、追加の結合条件を導入する必要があります。これは、拡張メソッド構文またはサブクエリのいずれかを使用して実行されます。
拡張メソッド構文
from p in context.Periods join f in context.Facts on p.id equals f.periodid into fg from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty() where p.companyid == 100 select f.value
サブクエリ
from p in context.Periods join f in context.Facts on p.id equals f.periodid into fg from fgi in (from f in fg where f.otherid == 17 select f).DefaultIfEmpty() where p.companyid == 100 select f.value
以上が複数の結合条件を使用して LINQ to SQL 左外部結合を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。