我有以下数据结构(只是一个示例性的可视化表示):
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
属性中的订单实体一样多次,我不想这样做。
简单 - 只需输入所有订单的名称和总和。
答案 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
}