c# - 如何使用 linq 扩展方法执行左外连接

标签 c# linq left-join

假设我有一个左外连接:

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

最佳答案

对于表 BarFoo.Foo _Id = Bar.Foo _Id 上的表 Foo 的(左外)连接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});

关于c# - 如何使用 linq 扩展方法执行左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584820/

相关文章:

c# - ASP.NET Web API Client ProgressMessageHandler Post Task 卡在 WinForm App 中

c# - (C#) 数据 GridView : How to get Selected Count with cells AND rows?

c# - 不支持使用 let 关键字的 Entity Framework Core 5?

c# - Lambda/LINQ 选择最小值

linq - 动态 Linq GroupBy 选择无法正常工作

c# - 如果联接中有多个字段,您如何在 Linq 中离开联接?

c# - 如何在 RavenDB 中选择一个类型的所有文档

c# - LINQ 是否返回集合的深拷贝?

sql - 显示游戏: optimization of left outer join and find a player的排名网格

mysql - 如何在附加条件下添加相同的列?