複数条件フィルタリングを使用した LINQ to SQL 左外部結合
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
このクエリは、 「事実」テーブルに一致するレコードがない場合でも、「期間」テーブルの各レコードの「事実」テーブル。さらに、追加のフィルターを適用して、「facts」テーブルの「otherid」列が 17 に等しいレコードのみを含めます。
このクエリを LINQ に変換するには、次の手順を実行できます。
var query = 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;
標準の左外部結合との主な違いは、結合テーブル "fg" を呼び出す前に Where() メソッドを使用することです。 DefaultIfEmpty()。これにより、結合結果が空であるためにレコードが除外される可能性がある前に、追加のフィルター条件が確実に適用されます。
代替アプローチには、サブクエリの使用が含まれます。
var query = 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;
これらのアプローチは両方とも、複数の結合条件を使用して左外部結合を実行した場合の望ましい結果。 JOIN の後の WHERE 句に追加のフィルター条件を配置すると、左外部結合により含めるべきレコードが除外される可能性があるため、望ましい動作が得られない可能性があることを理解することが重要です。
以上が複数条件フィルタリングを使用して LINQ to SQL 左外部結合を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。