2014-04-24 190 views
-1

我是LINQ的新手,我通常会用SQL来解决这个问题,但现在我正在尝试使用LINQ来做同样的事情,我无法弄清楚这一点。 我有3个表:LINQ包括查询

  • 订单(订单ID,数量等)
  • OrdersDetail(订单ID,产品ID,数量等)
  • 产品(产品ID,代码,描述)

现在我需要一个包含产品匹配特定代码或描述字符串的订单列表。我的SQL将是:

SELECT * FROM Orders WHERE OrderID IN(SELECT OrderID FROM OrdersDetail WHERE ProductID IN(SELECT ProductID FROM Products WHERE Code LIKE 'FilterText%' OR Descripcion LIKE 'FilterText%')) 

我该如何做到这一点与LINQ?此外,这是做到这一点的最佳方式,特别是如果产品表很大?谢谢!

+1

你可能会得到10个答案,因为这很简单,但下一次尝试包括*你试过什么*当您发布 – Jonesopolis

+0

你有3名名单或者你的对象与EF中的其他对象有关系? –

回答

5
db.Orders.Where(o=>o.OrderDetails 
         .Any(od=>od.Product.Code.StartsWith("filterText") 
          || od.Product.Description.StartsWith("filterText"))) 
      .ToList() 
+2

我相信,使用OP的特定“LIKE”子句时,您可能需要考虑使用“StartsWith”而不是包含。否则,这看起来是正确的答案! – BradleyDotNET

+0

@BradleyDotNET,是的,我刚刚看到,谢谢 –

+0

这是非常EF基础的是不是? –

3

试试这个:

var q = (from o in Orders 
     from d in o.OrderDetails 
     from p in d.Product 
     where p.Code.StartsWith("your filter") || p.Description.StartsWith("your filter") 
     select o); 
+0

@ AD.Net自从'o'.OrderDetails它会做内部连接,sql查询就像你的一样。 – RezaRahmati

+0

但你仍然得到一个交叉连接,不是吗? –

+0

@ AD.Net不用,试试吧。如果我这样写的话,它将是一个交叉连接 '从订单 从订单明细' – RezaRahmati