具有多个OR条件的Linq to Entity Join表

HaB*_*aBo 12 c# linq linq-to-entities entity-framework

我需要编写一个可以获得以下SQL查询的Linq-Entity状态

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

我坚持使用以下语法

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

这给了我以下错误

错误50 join子句中某个表达式的类型不正确.调用"加入"时类型推断失败.

如何为表执行多条件连接.

Ger*_*old 24

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

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


Adu*_*cci 7

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

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