EDIT: Okay, ora abbiamo un insieme un po 'più chiara di requisiti (anche se ancora lontano dalla chiaramente scritto) l'approccio più semplice sarebbe probabilmente:
var maxes = list.GroupBy(x => x.id2,
(key, xs) => xs.OrderByDescending(x => x.id1)
.First()
.value);
Purtroppo LINQ non fornisce un modo semplice di ottenere "l'elemento con il valore massimo" (invece del valore massimo stesso). Ho un metodo in MoreLINQ che fa questo, però, chiamato MaxBy
:
var maxes = list.GroupBy(x => x.id2,
(key, xs) => xs.MaxBy(x => x.id2).value);
risposta originale (Raggruppamento per ID2, prendendo il valore massimo)
sto rispondendo assumendo voi in realtà significava raggruppare per id2
anziché id1
e in realtà si desideravano i risultati 12 e 87 anziché 6 e 87. In tal caso, si desidera:
var maxes = list.GroupBy(x => x.id2, (id, xs) => xs.Max(x => x.value));
Or (forse più semplice da capire):
var maxes = list.GroupBy(x => x.id2)
.Select(xs => xs.Max(x => x.value));
Oppure:
var maxes = list.GroupBy(x => x.id2, x => x.value)
.Select(values => values.Max());
Oppure:
var maxes = list.GroupBy(x => x.id2, // Key selector
x => x.value, // Element selector
(key, values) => values.Max()); // Result selector
O anche:
var maxes = list.GroupBy(x => x.id2)
.Select(xs => xs.Select(x => x.value).Max());
Come si può vedere, GroupBy
ha un sacco di sovraccarichi :)
Oppure si potrebbe usare un'espressione di query:
var maxes = from x in list
group x.value by x.id2 into values
select values.Max();
non ti dovrebbe limitarsi a sia espressioni di query o il metodo di estensione versione - è importante capire entrambi, quindi puoi usare quello che ritieni più appropriato.
Non hanno espresso la tua domanda in modo chiaro a tutti . * Perché * ti aspetteresti che i risultati fossero 6 e 87? Perché stai raggruppando per ID1 quando ogni riga ha un ID1 diverso? Se si stesse raggruppando per id2 ciò avrebbe più senso, ma i risultati dovrebbero essere 12 e 87, non 6 e 87. Si prega di prendere tempo per chiarire la domanda. –
Ma '6 <12' e' 87> 8'; Spiega per favore. –
Penso che voglia raggruppare per id2 e selezionare Valore massimo per ogni gruppo –