2014-09-29 137 views
1

我有以下数据结构(只是一个示例性的视觉表示)的阵列:循环嵌套选择LINQ

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对象在其Orders[]多个Order条目,那么我想里面的所有帐目的总和。但是通过这个查询,我得到了第一个订单的总和。

如果我做这样说:

​​

然后我会得到的名字多次有在Customer对象的Orders[]产权制度的实体,我不希望出现这种情况。

简单地说 - 仅仅是所有订单的名称和总和。

回答

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 
} 
+0

作品,是一个非常干净和简单的解决方案!非常感谢!然而,你能否给我一个在查询中使用'let'和临时变量的例子,因为我正在这样做,并希望看到在这种情况下如何正确使用嵌套'select'语句? – Milkncookiez 2014-09-29 09:20:27

+0

@Milkncookiez看到更新,虽然你真的不需要在这里使用'let'。 – James 2014-09-29 09:28:43

+0

对不起,我想问一个带有“嵌套select”的例子,因为例如,如果我必须将所有客户的订单汇总为一个总额(而不是分别总结每个客户的订单),那么如何我会那样做吗? (鉴于我不完全确定如何使用嵌套查询的迭代逻辑)。 – Milkncookiez 2014-09-29 12:36:11