ホームページ >バックエンド開発 >C++ >LINQ to SQLで複数の条件を使用して左外部結合を実装する方法は?

LINQ to SQLで複数の条件を使用して左外部結合を実装する方法は?

DDD
DDDオリジナル
2024-12-31 01:05:09359ブラウズ

How to Implement a Left Outer Join with Multiple Conditions in LINQ to SQL?

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

タスクは、このクエリを 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。