LinQ для объектов GroupBy () по объекту и Sum () по количеству - PullRequest
4 голосов
/ 31 марта 2010

У меня есть довольно простой случай, который я начал решать с помощью foreach (), но потом подумал, что могу сделать это с помощью Linq.

В основном у меня есть IList, который содержит PaymentTransaction объектов и есть 2 свойства Dealer и Amount.

Я хочу GroupBy() Dealer и Sum() Amount.

Я пытался выполнить это, используя следующий код, но, к сожалению, он не работает:

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

Что именно я здесь не так делаю?

Ответы [ 3 ]

13 голосов
/ 31 марта 2010

Вопрос немного неясен относительно того, каким вы действительно хотите, чтобы результат был, поэтому я предполагаю, что вы хотите подвести итоги по каждой группе:

var test =
  paymentTransactionDao.GetAll()
  .GroupBy(x => x.Dealer)
  .Select(g => new { Dealer = g.Key, Sum = g.Sum(x => x.Amount) });
2 голосов
/ 08 октября 2012

Используйте групповую перегрузку , которая устраняет необходимость выбора, беря последовательность в соответствии с ее ключом, создавая, таким образом, значение результата из каждой группы и ключа. Затем проецируется каждый из элементов:

GroupBy(pt => pt.Dealer,
        pt => pt.Amount,
        (dealer, amount) => new {
                                  Dealer = dealer,
                                  TotalAmount = amount.Sum()
                                }
        )
2 голосов
/ 31 марта 2010

GroupBy вернет группу IGrouping<string, PaymentTransaction> (при условии, что Dealer - это строка). Попробуйте это:

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

(Просто угадаю, потому что я не перед ВС.)

...