Domanda

Ho una classe (C #) chiamata Hit con un ItemID (int) e una proprietà Score (int). Salto il resto dei dettagli per mantenerlo breve. Ora nel mio codice, ho un enorme elenco su cui devo fare la seguente selezione (in un nuovo elenco): ho bisogno di ottenere la somma di tutti gli Hit.Score per ogni singolo Hit.ItemID, ordinato per Punteggio. Quindi, se ho i seguenti elementi nell'elenco originale

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

l'elenco risultante dovrebbe contenere quanto segue:

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

Qualcuno può aiutare?

È stato utile?

Soluzione

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

Altri suggerimenti

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top