2009-05-04 17 views
12

Ho una classe (C#) chiamata Hit con una proprietà ItemID (int) e una valutazione (int). Salto il resto dei dettagli per farla breve. Ora nel mio codice, ho una lista enorme su cui ho bisogno di fare la seguente selezione (in una nuova lista): ho bisogno di ottenere la somma di tutti i Hit.Score per ogni singolo Hit.ItemID, ordinato per punteggio. Quindi, se ho le seguenti voci nella lista originaleQuery di Linq con SOMMA e ORDINE DI

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

La lista risultante deve contenere i seguenti:

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

Qualcuno può aiutarmi?

risposta

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);