2013-01-22 161 views
-2

我想查询一个对象的层次结构是这样的:C#lambda表达式,子子查询

客户 - >IList订单 & 订单 - >IList产品

Customer对象拥有一组订单,我的Order对象有一个产品集合。

我想要做的是让订购特定产品的客户。我会通过product id来查询。在查询结束时,我想获得Customer list

我试过了,但没有奏效。

public ICollection<Customer> GetByParticularProduct(int productId) 
{ 

    return allCustomers 
    .Where(customer => customer.Orders 
.Any(order => order.Products 
.Any(prod => prod.Id == productId))) 
    .ToList(); 
} 

我该如何解决这个问题?

+1

你所说的 “没有工作” 的意思是?什么是'ProductsAny()'? – millimoose

+0

对不起,我修改了它。我的意思是没有工作。我得到一个ArgumentNullException,并发现问题不是我的查询。这是我的映射。我的订单集合没有被映射到正确的位置,而且它是空白的。现在我将其映射到正确的位置并且它可以正常工无论如何感谢您的关注... – ayk

回答

-1
return allCustomers 
    .Where(customer => customer.Orders 
     .Any(order => order.Products 
      .Any(prod => prod.Id == productId))).ToList(); 

return allCustomers 
    .Where(customer => customer.Orders 
     .Any(order => order.ProductId == productId))).ToList(); 
+0

您的第一张照片看起来与OP提供的样本完全相同 – Chad

0

如果您的收藏可以包含null的,你可以试试这个

public ICollection<Customer> GetByParticularProduct(int productId) 
{ 
    return (from cust in allCustomers.Where(x => x != null) 
      let orders = cust.Orders.Where(x => x != null) 
      let prods = orders.SelectMany(x => x.Products).Where(x => x != null) 
      where prods.Any(x => x.Id == productId) 
      select cust) 
      .ToList(); 
}