为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕妹3146593 2021-11-14 14:56:11
我想对具有给定值的两列中的任何一列执行连接例如,如何将以下 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();


查看完整回答
反对 回复 2021-11-14
?
慕莱坞森

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应用。但即使它们当然也会有相同的结果但不相同的执行计划取决于数据库


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信