2009-05-04 6 views
12

J'ai une classe (C#) appelée Hit avec un ItemID (int) et une propriété Score (int). Je passe le reste des détails pour le garder court. Maintenant, dans mon code, j'ai une liste énorme sur laquelle je dois faire la sélection suivante (dans une nouvelle liste): J'ai besoin d'obtenir la somme de tous Hit.Score pour chaque Hit.ItemID individuel, classé par Score. Donc, si j'ai les éléments suivants dans la liste originaleLinq Query with SUM et 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 

la liste résultante doit contenir les éléments suivants:

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

quelqu'un peut-il aider?

Répondre

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