我有一个非常简单的案例,我开始使用foreach()解决,但后来我认为我可以使用Linq来做。
基本上我IList
包含PaymentTransaction
个对象,有2个属性Dealer
和Amount
。
我希望GroupBy()
Dealer
和Sum()
Amount
。{/ p>
我尝试使用以下代码完成此操作,但不幸的是它不起作用:
var test = paymentTransactionDao.GetAll().GroupBy(x => x.Dealer).Sum(x => x.Amount);
我到底错在了什么?
答案 0 :(得分:13)
问题是你真正想要的结果有点不清楚,所以我假设你想要总结每组中的金额:
var test =
paymentTransactionDao.GetAll()
.GroupBy(x => x.Dealer)
.Select(g => new { Dealer = g.Key, Sum = g.Sum(x => x.Amount) });
答案 1 :(得分:2)
GroupBy将返回一堆IGrouping<string, PaymentTransaction>
(假设经销商是一个字符串)。试试这个:
...GroupBy(...).Select(x => new {Dealer=x.Key, Amount=x.Sum(xx => xx.Amount)});
(只是猜测,因为我不在VS面前。)
答案 2 :(得分:2)
使用groupby overload通过根据其键获取序列来消除选择的需要,从而从每个组和键创建结果值。然后投射每个元素:
GroupBy(pt => pt.Dealer,
pt => pt.Amount,
(dealer, amount) => new {
Dealer = dealer,
TotalAmount = amount.Sum()
}
)