Query Linq con SUM e ORDER BY
-
03-07-2019 - |
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?
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