C# 使用或语法在多个列上使用连接表
所以我想做的是:-C# 使用或语法在多个列上使用连接表,c#,sql,entity-framework,linq,C#,Sql,Entity Framework,Linq,所以我想做的是:- SELECT * FROM TableA JOIN TableB ON TableA.OriginPhoneNumber=TableB.Id OR TableA.DestinationPhoneNumber=TableB.Id 我知道这个问题很奇怪!但我正试图在EntityFramework/Linq中复制这一点——查看所有示例,我发现当连接使用AND(使用匿名类型)时,可以用一种非常简单的方法来实现这一点,但OR连接是否存在相同的结果 我使用了Union var firs
SELECT * FROM TableA
JOIN TableB ON TableA.OriginPhoneNumber=TableB.Id OR TableA.DestinationPhoneNumber=TableB.Id
我知道这个问题很奇怪!但我正试图在EntityFramework/Linq中复制这一点——查看所有示例,我发现当连接使用AND(使用匿名类型)时,可以用一种非常简单的方法来实现这一点,但OR连接是否存在相同的结果 我使用了
Union
var firstJoin=from tbl in TableA
join c in TableB
on c.OriginPhoneNumber Equals tbl.Id
var secondJoin=from tbl in TableA
join c in TableB
on c.DestinationPhoneNumber Equals tbl.Id
var result=firstJoin.Union(secondJoin)
只需使用where子句进行交叉连接
var results = from a in db.TableA
from b in db.TableB
where a.OriginPhonenumber == b.Id
|| a.DestinationPhoneNumber == b.Id
select new { A = a, B = b };
连接条件中的or是否比这更有效值得怀疑,但很可能两者都会导致相同的执行计划。撇开性能不谈,它将给出相同的结果。您可以进行交叉连接,并在where子句中设置on条件。DB应该足够聪明,可以使用与联接相同的查询执行计划。如果您可以在EF中复制此行为,请查看探查器,找出EF生成的查询。