1. ホーム
  2. c#

[解決済み] Linq拡張メソッドを使用して左外部結合を実行する方法

2022-03-27 12:36:56

質問

このような左外部結合があると仮定して。

from f in Foo
join b in Bar on f.Foo_Id equals b.Foo_Id into g
from result in g.DefaultIfEmpty()
select new { Foo = f, Bar = result }

同じ作業を拡張メソッドを使ってどのように表現するのでしょうか?例えば

Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ???)
    .Select(???)

解決方法は?

テーブルの(左外部)結合の場合 Bar とテーブル Foo について Foo.Foo_Id = Bar.Foo_Id をラムダ記法で記述します。

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});