按对象分组的LinQ to Objects GroupBy()和按数量求和的Sum()

4
我有一个非常简单的案例,最初我使用foreach()解决它,但后来我想用Linq解决它。
基本上,我有一个包含PaymentTransaction对象的IList,其中有两个属性Dealer和Amount。
我想通过Dealer进行GroupBy()并通过Amount进行Sum()。
我尝试使用以下代码来实现这一点,但不幸的是它不起作用:
var test = paymentTransactionDao.GetAll().GroupBy(x => x.Dealer).Sum(x => x.Amount);

我在这里到底做错了什么?

3个回答

13

这个问题有点不清楚你实际想要的结果是什么,因此我假设您想要对每个组中的金额进行求和:

var test =
  paymentTransactionDao.GetAll()
  .GroupBy(x => x.Dealer)
  .Select(g => new { Dealer = g.Key, Sum = g.Sum(x => x.Amount) });

@gabe:我不知道,我不会假设关于那个对象的类型或方法的作用除了它返回一个集合之外的任何事情。 - Guffa

2
使用groupby重载,按照其键对序列进行分组,从每个分组和键创建结果值,因此不需要选择。然后将每个元素投影出来。
GroupBy(pt => pt.Dealer,
        pt => pt.Amount,
        (dealer, amount) => new {
                                  Dealer = dealer,
                                  TotalAmount = amount.Sum()
                                }
        )

2

GroupBy会返回一堆IGrouping<string, PaymentTransaction>(假设Dealer是一个字符串)。试试这个:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接