データへのアクセスに指定された条件で複数のテーブルを結合する必要がある状況では、LINQ to SQL は効果的な手段を提供します。そのような操作を実行します。この記事では、データを取得するために複数の結合条件を持つ左外部結合が必要な特定のシナリオについて詳しく説明します。
初期クエリとチャレンジ
次の 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 式に変換することです。 LINQ で左外部結合を実行するための標準的な方法 (DefaultIfEmpty() を使用するなど) はありますが、追加の結合条件 f.otherid = 17 を組み込むことには課題があります。
解決策: 結合条件の配置DefaultIfEmpty() の前
この課題に対処する鍵は、結合条件を導入することです。 DefaultIfEmpty() を呼び出す前に。これは、拡張メソッド構文またはサブクエリを使用して実現できます。
// Using extension method syntax 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; // Using a subquery 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;
結合条件の配置の説明
AND f.otherid = 17 条件は、次の一部です。これは、この条件を満たすファクト表の行のみが期間表の対応する行と結合されるようにするためです。結合後の WHERE 句にこの条件を指定すると、ファクト テーブル内に一致する行がない行は、期間テーブルから除外されます。たとえ、それらの行が条件を満たしていてもです。結合で条件を指定することで、望ましい動作が維持されます。
以上がLINQ to SQLで複数の条件を使用して左外部結合を実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。