ホームページ > バックエンド開発 > C++ > 単一の LINQ クエリで複数フィールド結合を実行するにはどうすればよいですか?

単一の LINQ クエリで複数フィールド結合を実行するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-24 02:22:09
オリジナル
345 人が閲覧しました

How Can I Perform a Multi-Field Join in a Single LINQ Query?

LINQ での単一クエリの複数フィールド結合

LINQ で結合操作を実行する場合、通常は複数のフィールドでテーブルを同時に結合する必要があります。 where 句を使用して結合に追加の制約を追加することは可能ですが、これが常に最も効率的または読みやすいアプローチであるとは限りません。

単一の接続で複数のフィールドを結合するには、匿名型を使用できます。たとえば、次のコードは、field1 フィールドと field2 フィールドに基づいて entity テーブルと entity2 テーブルを結合します。

<code class="language-csharp">var result = from x in entity
             join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 }
             select new { x, y }; // 选择结果</code>
ログイン後にコピー
この例では、匿名型

new { x.field1, x.field2 } を使用して、結合に使用されるフィールドのみを含む新しい型を作成します。これらのタイプの値は、new { y.field1, y.field2 } 演算子を使用して比較され、結合が実行されます。 最後に、equals ステートメントは、select new {x, y}entity の両方のデータを含む連結結果を選択します。 entity2

匿名型で使用されるフィールドは互換性がある必要がある、つまり同じ型である必要があり、どちらかのフィールドが null 許容である場合は、それも null 許容である必要があることに注意することが重要です。フィールドに互換性がない場合は、例外がスローされます。

このアプローチは等価結合に対して機能しますが、カスタム等価比較器を使用するか、追加の結合句を使用することにより、より複雑な結合を実行することも可能です。たとえば、次のコードはカスタム等価比較器を使用して

テーブルと entity テーブルで非等結合を実行します。 entity2

この例では、カスタム等価コンパレーターを使用して、
<code class="language-csharp">var result = from x in entity
             join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 } into gj
             from y in gj.DefaultIfEmpty()
             where y == null || y.field3 == x.field4
             select new { x, y }; // 选择结果</code>
ログイン後にコピー
フィールドと

フィールドの値を比較します。値が等しくない場合でも結合は実行されますが、field3 の値は null になります。 field4 y匿名型とカスタム等価比較器の使用方法を学ぶことで、LINQ を使用して、複数のフィールドの結合を含むさまざまな結合を実行できるようになります。 連結されたデータを取得するには、必ず「最終結果」を選択してください。

以上が単一の LINQ クエリで複数フィールド結合を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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