ホームページ > バックエンド開発 > C++ > 拡張メソッドは LINQ の左外部結合をどのように簡素化できるのでしょうか?

拡張メソッドは LINQ の左外部結合をどのように簡素化できるのでしょうか?

Barbara Streisand
リリース: 2025-01-24 10:12:10
オリジナル
690 人が閲覧しました

How Can Extension Methods Simplify Left Outer Joins in LINQ?

LINQ の左外部結合拡張メソッドの使用

LINQ で外部結合を実行するには、Join メソッドと DefaultIfEmpty メソッドを組み合わせて使用​​します。ただし、コードの読みやすさと単純さを向上させるために、拡張メソッドはこれらの操作を表現するためのより便利な方法を提供します。

拡張メソッドを使用して左外部結合を実行します。次の構文を考慮してください:

<code class="language-csharp">Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ...)
    .Select(...)</code>
ログイン後にコピー

この構文では:

  • GroupJoin キー セレクターに従って最初のシーケンス (Foo) の要素をグループ化し、互換性のあるキー セレクターを使用して 2 番目のシーケンス (Bar) と結合します。
  • 結果は、タプルの列挙可能なコレクションです。各タプルには、最初のシーケンスの要素と、2 番目のシーケンスの要素のグループ化された列挙可能なコレクションが含まれます。
  • SelectMany は、グループ化された要素をフラット化し、それらを最初のシーケンスと結合するために使用されます。
  • DefaultIfEmpty は、2 番目のシーケンスに一致する要素がない場合にデフォルト値が返されるようにするために使用されます。

左外部結合を完了するには、残りの手順として、結合された要素に対して選択を実行します。この場合、Select メソッドを使用して、各タプルの必要なプロパティを投影できます。

たとえば、Foo_Id 列に基づいて Foo と Bar の間の左外部結合を表現するには、次のコードを使用できます。

<code class="language-csharp">var qry = Foo.GroupJoin(
          Bar, 
          foo => foo.Foo_Id, 
          bar => bar.Foo_Id,
          (x,y) => new { Foo = x, Bars = y })
       .SelectMany(
           x => x.Bars.DefaultIfEmpty(),
           (x,y) => new { Foo=x.Foo, Bar=y});</code>
ログイン後にコピー

このコードは、匿名型の列挙可能なコレクションを生成します。各型には、Foo テーブルの Foo プロパティと Bar テーブルの Bar プロパティ (一致するバーが存在しない場合は null) が含まれます。

以上が拡張メソッドは LINQ の左外部結合をどのように簡素化できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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