首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个OR条件的Linq到实体联接表

具有多个OR条件的Linq到实体联接表
EN

Stack Overflow用户
提问于 2013-04-08 19:24:24
回答 3查看 39.5K关注 0票数 13

我需要编写一个Linq实体状态,该状态可以获得以下SQL查询。

代码语言:javascript
复制
SELECT  RR.OrderId
FROM    dbo.TableOne RR
        JOIN dbo.TableTwo  M ON RR.OrderedProductId = M.ProductID OR RR.SoldProductId= M.ProductID
WHERE   RR.StatusID IN ( 1, 4, 5, 6, 7 )

我被以下语法困住了

代码语言:javascript
复制
 int[] statusIds = new int[] { 1, 4, 5, 6, 7 };
            using (Entities context = new Entities())
            {
                var query = (from RR in context.TableOne
                             join M in context.TableTwo on new { RR.OrderedProductId, RR.SoldProductId} equals new { M.ProductID }
                             where RR.CustomerID == CustomerID 
                             && statusIds.Any(x => x.Equals(RR.StatusID.Value))
                             select RR.OrderId).ToArray();
            }

这给了我以下的错误

错误50联接子句中的一个表达式的类型不正确。类型推断在调用'Join'.时失败

如何对表执行多个条件联接。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-08 19:37:42

您不必使用联接语法。在where子句中添加谓词具有相同的效果,您可以添加更多条件:

代码语言:javascript
复制
var query = (from RR in context.TableOne
             from M in context.TableTwo 
             where RR.OrderedProductId == M.ProductID
                   || RR.SoldProductId == M.ProductID // Your join
             where RR.CustomerID == CustomerID 
                   && statusIds.Any(x => x.Equals(RR.StatusID.Value))
             select RR.OrderId).ToArray();
票数 27
EN

Stack Overflow用户

发布于 2013-04-08 19:38:00

将查询语法从使用join更改为使用附加的from子句

代码语言:javascript
复制
  var query = (from RR in context.TableOne
               from M in context.TableTwo.Where(x => x.ProductID == RR.OrderedProductId || x.ProductID == RR.SoldProductId)
               where statusIds.Any(x => x.Equals(RR.StatusID.Value))
               select RR.OrderId).ToArray();
票数 7
EN

Stack Overflow用户

发布于 2013-04-11 04:40:20

多重连接:

代码语言:javascript
复制
var query = (from RR in context.TableOne
             join M in context.TableTwo on new { oId = RR.OrderedProductId,  sId = RR.SoldProductId} equals new { oId = M.ProductID, sId = M.ProductID }
             where RR.CustomerID == CustomerID 
             && statusIds.Any(x => x.Equals(RR.StatusID.Value))
             select RR.OrderId).ToArray();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15887223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档