LinQ以对象形式对GroupBy(),按金额对Sum()对象

时间:2010-03-31 07:18:39

标签: .net linq grouping linq-to-objects

我有一个非常简单的案例,我开始使用foreach()解决,但后来我认为我可以使用Linq来做。

基本上我IList包含PaymentTransaction个对象,有2个属性DealerAmount

我希望GroupBy() DealerSum() Amount。{/ p>

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

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

我到底错在了什么?

3 个答案:

答案 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()
                                }
        )