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

Uen*_*tee 4 .net c# sql 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
Run Code Online (Sandbox Code Playgroud)

我开始做以下事情:

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 })
Run Code Online (Sandbox Code Playgroud)

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

Dra*_*rop 8

INNER JOIN是一种更易读的语法,但它可以在纯SQL中翻译成用WHERE子句过滤的表的笛卡尔积.

所以我们可以简单地使用一个WHERE子句并从中构建linq:

from x in Foo
from y in Bar
    .Where(y => y.field1 == x.field1 || y.field2 == x.field2)
Run Code Online (Sandbox Code Playgroud)

Ps:INNER JOIN并且WHERE不会在SQL中同时进行评估,因此它们不相同.ON条件过滤INNER JOIN然后WHERE应用.但是,即使他们将拥有相同的结果,但根据数据库当然不是相同的执行计划.