2010-03-31 290 views
4

我有一个非常简单的例子,我开始使用foreach()解决,但后来我认为我可以使用Linq来完成。LinQ to objects GroupBy()by object and Sum()by amount

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

我想GroupBy()DealerSum()Amount

我试图做到这一点使用下面的代码,但不幸的是它不工作:

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

究竟我做错了的是什么?

回答

13

的问题是你真正想要得到的结果是有点不清楚,所以我假设你希望每个组中总结的量:

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

你需要'GetAll'吗? – Gabe 2010-03-31 07:36:38

+0

谢谢,这个作品! – 2010-03-31 07:42:19

+0

@gabe:我不知道,我不假设什么样的对象是或者除了那个之外的方法是什么返回一个集合。 – Guffa 2010-03-31 08:26:18

2

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

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

(只是猜测,因为我没有VS.前)

2

使用groupby overload其通过根据其键从而产生从每个组和密钥的结果值取序列消除了对选择的需要。然后投影每个元素:

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