我有:
public class Order
{
public string Customer;
public List<OrderLine> OrderLines;
}
public class OrderLine
{
public decimal Quantity;
public decimal UnitPrice;
}
Run Code Online (Sandbox Code Playgroud)
我的目标是按降序金额搜索客户订单列表.(金额==每个订单数量的加法*UnitPrice)
假设我们有2个客户的6个订单(Customer1,Customer2).每个客户都有3个orderLines.
我正在尝试:
var result = Database.GetAllOrders().OrderByDescending(order =>
order.Lines.Sum(ol=>ol.Quantity*ol.UnitPrice))
.GroupBy(order=>order.CustomerName,
order=>order.Lines.Sum(ol=>ol.Quantity*ol.UnitPrice),
(customerName, amount) => new {Customer=customerName, Amount=amount});
Run Code Online (Sandbox Code Playgroud)
但我得到这样的东西:
客户2:
- 金额:78
- 金额:89
- 金额:12
客户1:
- 金额:64
- 金额:36
- 金额:28
虽然我想要寻求的是:
客户2:
- 金额179
客户1:
- 金额128
请问有什么建议吗?
非常感谢!
听起来您需要在订购之前进行分组和汇总,并且只按客户名称(或理想情况下,客户ID)进行分组:
var query = Database.GetAllOrders()
.GroupBy(order => order.CustomerName)
.Select(orders => new {
Customer = orders.Key,
Amount = orders.Sum(o => o.OrderLines.Sum(
l => l.Quantity * l.UnitPrice))
})
.OrderByDescending(x => x.Amount);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |