ホームページ > バックエンド開発 > C++ > 複数条件フィルタリングを使用して LINQ to SQL 左外部結合を実行する方法

複数条件フィルタリングを使用して LINQ to SQL 左外部結合を実行する方法

DDD
リリース: 2025-01-04 08:48:34
オリジナル
892 人が閲覧しました

How to Perform a LINQ to SQL Left Outer Join with Multi-Condition Filtering?

複数条件フィルタリングを使用した 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート