C# lambda 表达式,子子查询

本文关键字:查询 表达式 lambda | 更新日期: 2023-09-27 17:55:22

我正在尝试查询一个对象层次结构,如下所示:

客户 --订单> 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();
}

我怎样才能度过难关?

C# lambda 表达式,子子查询

如果你的集合可能包含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();
}
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();