一尘不染

如何使用linq扩展方法执行左外部联接

c#

假设我有一个这样的左外部联接:

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(???)

阅读 206

收藏
2020-05-19

共1个答案

一尘不染

对于一个(左外)加入一个表的Bar一个表FooFoo.Foo_Id = Bar.Foo_Id在lambda符号:

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});
2020-05-19