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

我需要编写一个可以获得以下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 ) 

我坚持使用以下语法

  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子句中某个表达式的类型不正确。 调用“加入”时类型推断失败。

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

您不必使用连接语法。 在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(); 

将查询语法从使用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(); 

多个联接:

 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();