使用OR语法在多个列上使用表连接

时间:2016-03-23 23:26:25

标签: c# sql entity-framework linq

所以我要做的是: -

SELECT * FROM TableA
JOIN TableB ON TableA.OriginPhoneNumber=TableB.Id OR TableA.DestinationPhoneNumber=TableB.Id

我知道相当奇怪的查询!但是我试图在EntityFramework / Linq中复制它 - 看看所有的样本,当联接使用AND(使用匿名类型)时,我可以看到一个非常简单的方法,但是存在相同的结果还是加入?

2 个答案:

答案 0 :(得分:4)

只需使用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 };

令人怀疑的是,连接条件或连接条件会比这更有效,但很可能会导致相同的执行计划。除了性能之外,它会产生相同的结果。

答案 1 :(得分:1)

我使用了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)