LINQ: seleccione registros con el valor máximo de propiedad por grupo
Tengo un conjunto de datos como este:
GroupName GroupValue MemberName MemberValue
'Group1' 1 'Member1' 1
'Group1' 1 'Member2' 2
'Group2' 2 'Member3' 3
'Group2' 2 'Member4' 2
'Group3' 2 'Member5' 4
'Group3' 2 'Member6' 1
Lo que quiero seleccionar es las filas que tienen el máximoMemberValue
porGroupName
, pero solo para aquellosGroupName
s que tienen el mayorGroupValue
y pasarlos a una función de delegado. Me gusta esto:
'Group2' 2 'Member3' 3
'Group3' 2 'Member5' 4
Hasta ahora he probado este formato ...
data.Where(maxGroupValue =>
maxGroupValue.GroupValue == data.Max(groupValue => groupValue.GroupValue))
.Select(FunctionThatTakesData)
... pero eso me da todos los miembros de Group2 y Group3. He intentado poner unGroupBy()
antes deSelect()
, pero eso convierte la salida en unIGrouping<string, DataType>
entoncesFunctionThatTakesData()
no sabe qué hacer con él y no puedo hacer otroWhere()
para filtrar solo el máximoMemberValue
s.
¿Qué puedo hacer para que este conjunto de datos se filtre correctamente y pase a mi función?