Question

J'ai une classe (C #) appelée Hit avec une propriété ItemID (int) et une propriété Score (int). Je passe le reste des détails pour rester bref. Maintenant, dans mon code, j'ai une énorme liste sur laquelle je dois faire la sélection suivante (dans une nouvelle liste): Je dois obtenir la somme de tous les Hit.Score pour chaque Hit.ItemID individuel, classé par Score. Donc, si j'ai les éléments suivants dans la liste d'origine

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?

Était-ce utile?

La solution

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

Autres conseils

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top