使用嵌套选择LINQ循环数组

时间:2014-09-29 09:11:50

标签: c# linq nested-queries

我有以下数据结构(只是一个示例性的可视化表示):

list<customer>
{
    customer
    {
        name
        orders[]
        {
            order
            {
                quantity
                product
                {
                    price
                }
            }
            order
            {
                ...
            }
            order
            {
                ...
            }
    }
    customer
    {
        ...
    }
    customer
    {
        ...
    }
}

我想获得每个客户的名称和他的订单总数(数量*产品价格)。现在我有以下内容:

var sumEachCust = from c in customers
                  let sum = 0.0m
                  select new
                  {
                     c.Name,
                     sum =+ (from o in c.Orders
                             select o.Product.Price * o.Quantity).FirstOrDefault()
                  };    

如果Customer对象在Order中有多个Orders[]条目,那么我想要内部所有条目的总和。但是通过这个查询,我得到了第一个订单的总和。

如果我这样做:

var sumEachCust = from c in customers
                  let sum = 0.0m
                  from o in c.Orders
                  select new
                  {
                    c.Name,
                    sum =+ o.Product.Price * o.Quantity
                  };

然后我将获得该名称的次数与Orders[]对象的Customer属性中的订单实体一样多次,我不想这样做。

简单 - 只需输入所有订单的名称和总和。

1 个答案:

答案 0 :(得分:7)

from c in customers
select new
{
     Name = c.name,
     OrderTotal = c.orders.Sum(o => o.product.price * o.quantity)
}

如果确实想要使用let,那么这就是你如何为这种情况做到这一点

from c in customers
let sum = c.orders.Sum(o => o.product.price * o.quantity)
select new
{
    Name = c.name,
    OrderTotal = sum
}