2009-05-04 3 views
12

У меня есть класс (C#), называемый Hit с ItemID (int) и свойство Score (int). Я пропущу остальные детали, чтобы не допустить этого. Теперь в моем коде у меня есть огромный список, на котором мне нужно сделать следующий выбор (в новый список): мне нужно получить сумму всех Hit.Score для каждого отдельного Hit.ItemID, упорядоченного по Score. Так что, если у меня есть следующие пункты в первоначальном спискеLinq Query with SUM и ORDER BY

ItemID=3, Score=5 
ItemID=1, Score=5 
ItemID=2, Score=5 
ItemID=3, Score=1 
ItemID=1, Score=8 
ItemID=2, Score=10 

результирующий список должен содержать следующее:

ItemID=2, Score=15 
ItemID=1, Score=13 
ItemID=3, Score=6 

Может кто-нибудь помочь?

ответ

12
var q = (from h in hits 
    group h by new { h.ItemID } into hh 
    select new { 
     hh.Key.ItemID, 
     Score = hh.Sum(s => s.Score) 
    }).OrderByDescending(i => i.Score); 
3
IEnumerable<Hit> result = hits. 
    GroupBy(hit => hit.ItemID). 
    Select(group => new Hit 
        { 
         ItemID = group.Key, 
         Score = group.Sum(hit => hit.Score) 
        }). 
    OrderByDescending(hit => hit.Score);