linq-to-sql结合.any表达式

时间:2010-05-01 04:32:18

标签: linq linq-to-sql

我需要按子集合的属性值过滤父项。 我正在做这样的事情:

  var results = (from c in db.Customers where  
  c.Orders.Any(o => o.Status = (int)Status.Ordered)
  select c;

没关系,但现在我需要过滤2个值,即获取所有具有BOTH值的chilren记录的父记录:

  var results = (from c in db.Customers where  
  c.Orders.Any(o => o.Status == (int)Status.Ordered) && (o.Status == (int).Shipped)) 
  select c;

尝试像这样明显的东西是行不通的。

1 个答案:

答案 0 :(得分:2)

当然它不起作用。您正在按满足不可能条件的订单进行过滤。你说的是:“给我所有状态等于Ordered AND 等于同时发货的订单”。难怪没有这样的订单。 : - )

如果您希望所有同时拥有订单和已发货订单的客户,您别无选择,只能使用Any两次:

var results = (from c in db.Customers where  
    c.Orders.Any(o => o.Status == (int)Status.Ordered) ) 
    &&
    c.Orders.Any(o => o.Status == (int)Status.Shipped) ) 
    select c;