循环嵌套选择LINQ
问题描述:
我有以下数据结构(只是一个示例性的视觉表示)的阵列:循环嵌套选择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[]
产权制度的实体,我不希望出现这种情况。
简单地说 - 仅仅是所有订单的名称和总和。
答
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
}
作品,是一个非常干净和简单的解决方案!非常感谢!然而,你能否给我一个在查询中使用'let'和临时变量的例子,因为我正在这样做,并希望看到在这种情况下如何正确使用嵌套'select'语句? – Milkncookiez 2014-09-29 09:20:27
@Milkncookiez看到更新,虽然你真的不需要在这里使用'let'。 – James 2014-09-29 09:28:43
对不起,我想问一个带有“嵌套select”的例子,因为例如,如果我必须将所有客户的订单汇总为一个总额(而不是分别总结每个客户的订单),那么如何我会那样做吗? (鉴于我不完全确定如何使用嵌套查询的迭代逻辑)。 – Milkncookiez 2014-09-29 12:36:11