.net LinQ to objects GroupBy()按对象和Sum()按金额

.net LinQ to objects GroupBy()按对象和Sum()按金额,.net,linq,grouping,linq-to-objects,.net,Linq,Grouping,Linq To Objects,我有一个非常简单的例子,我开始用foreach()解决,但后来我想我可以用Linq解决 基本上我有IList,它包含PaymentTransaction对象,有两个属性Dealer和Amount 我想按GroupBy()经销商和Sum()按金额 我尝试使用以下代码来完成此任务,但不幸的是,它不起作用: var test = paymentTransactionDao.GetAll().GroupBy(x => x.Dealer).Sum(x => x.Amount); 我到底做错了

我有一个非常简单的例子,我开始用foreach()解决,但后来我想我可以用Linq解决

基本上我有
IList
,它包含
PaymentTransaction
对象,有两个属性
Dealer
Amount

我想按
GroupBy()
经销商
Sum()
金额

我尝试使用以下代码来完成此任务,但不幸的是,它不起作用:

var test = paymentTransactionDao.GetAll().GroupBy(x => x.Dealer).Sum(x => x.Amount);

我到底做错了什么?

GroupBy将返回一组
IGrouping
(假设Dealer是一个字符串)。试试这个:

...GroupBy(...).Select(x => new {Dealer=x.Key, Amount=x.Sum(xx => xx.Amount)});

(只是猜测,因为我不在VS前面。)

关于你真正想要的结果是什么,这个问题有点不清楚,所以我假设你想要总结每组的金额:

var test =
  paymentTransactionDao.GetAll()
  .GroupBy(x => x.Dealer)
  .Select(g => new { Dealer = g.Key, Sum = g.Sum(x => x.Amount) });
使用,通过根据其键获取序列,从而从每个组和键创建结果值,从而消除了对选择的需要。然后投影每个元素:

GroupBy(pt => pt.Dealer,
        pt => pt.Amount,
        (dealer, amount) => new {
                                  Dealer = dealer,
                                  TotalAmount = amount.Sum()
                                }
        )

@gabe:我不知道,我不假设它是什么类型的对象,也不假设这个方法除了返回一个集合之外还做了什么。