如何在 A 列或 B 列的 Linq 查询中加入

我想对具有给定值的两列中的任何一列执行连接


例如,如何将以下 SQL 查询转换为等效的 Linq(方法语法):


select f.Id fId, b.Id bId from Foo f

inner join Bar b on f.FooVal = b.BarValCol1 or f.FooVal = b.BarValCol2

我开始做以下事情:


Context.Foos

.Join(Context.Bars, f => f.FooVal, b => b.BarValCol1 [OR?] b.BarValCol2, (f, b) => new { f, b })

.Select(bf => new { fId = bf.f.Id, bId = bf.b.Id })

(在此示例中,两列包含整数值)


慕妹3146593
浏览 169回答 2
2回答

慕码人8056858

您可以两次使用 LINQ:Context.Foos  .Join(Context.Bars, f => f.FooVal, b => b.BarValCol1, (f, b) => new { f, b })  .Select(bf => new { fId = bf.f.Id, bId = bf.b.Id }).ToList().AddRange(  Context.Foos    .Join(Context.Bars, f => f.FooVal, b => b.BarValCol2, (f, b) => new { f, b })    .Select(bf => new { fId = bf.f.Id, bId = bf.b.Id })  ).Distinct();

慕莱坞森

INNER JOIN是一种更易读的语法,但它可以在纯 SQL 中转换为用WHERE子句过滤的表的笛卡尔积。所以我们可以简单地使用一个WHERE子句并从中构建 linq:from x in Foofrom y in Bar    .Where(y => y.field1 == x.field1 || y.field2 == x.field2)Ps:INNER JOIN和WHERE在 SQL 中不是同时计算的,所以它们不等价。ON条件过滤器INNER JOIN然后WHERE应用。但即使它们当然也会有相同的结果但不相同的执行计划取决于数据库
打开App,查看更多内容
随时随地看视频慕课网APP