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) と結合します。 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 サイトの他の関連記事を参照してください。