我想对具有给定值的两列中的任何一列执行连接例如,如何将以下 SQL 查询转换为等效的 Linq(方法语法):select f.Id fId, b.Id bId from Foo finner 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 })(在此示例中,两列包含整数值)
2 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
您可以两次使用 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();
慕莱坞森
TA贡献1810条经验 获得超4个赞
INNER JOIN是一种更易读的语法,但它可以在纯 SQL 中转换为用WHERE子句过滤的表的笛卡尔积。
所以我们可以简单地使用一个WHERE子句并从中构建 linq:
from x in Foo
from y in Bar
.Where(y => y.field1 == x.field1 || y.field2 == x.field2)
Ps:INNER JOIN和WHERE在 SQL 中不是同时计算的,所以它们不等价。ON条件过滤器INNER JOIN然后WHERE应用。但即使它们当然也会有相同的结果但不相同的执行计划取决于数据库
- 2 回答
- 0 关注
- 168 浏览
添加回答
举报
0/150
提交
取消