【问题标题】:Join a table using on multiple columns using a OR syntax [duplicate]使用 OR 语法在多个列上加入表 [重复]
【发布时间】:2016-03-23 23:26:24
【问题描述】:

所以我想做的是:-

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

我知道相当奇怪的查询!但是我正在尝试在 EntityFramework/Linq 中复制它 - 查看所有示例,当连接使用 AND(使用匿名类型)时,我可以看到一种非常简单的方法,但 OR 连接是否存在相同的结果?

【问题讨论】:

  • 您可以进行交叉连接并将 on 条件放在 where 子句中。数据库应该足够聪明,可以使用与连接相同的查询执行计划。
  • 如果您可以在 EF 中复制此行为,请查看分析器并找出 EF 生成的查询。

标签: c# sql entity-framework linq


【解决方案1】:

只需使用 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 是否比这更有效是值得怀疑的,但很可能两者都会导致相同的执行计划。抛开性能不谈,它会给出相同的结果。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2021-05-13
      • 2019-06-14
      • 2020-11-05
      • 1970-01-01
      • 2021-01-27
      • 2011-08-11
      相关资源
      最近更新 更多