Tengo un objeto que se ve algo como esto:Linq ordenar, agrupar por orden y por cada grupo?
public class Student
{
public string Name { get; set; }
public int Grade { get; set; }
}
me gustaría crear la siguiente consulta: grados de grupo por el nombre del estudiante, ordenar cada grupo de estudiantes por grados, y los grupos de orden por grado máximo en cada grupo .
Por lo tanto, se verá así:
A 100
A 80
B 80
B 50
B 40
C 70
C 30
creé la siguiente consulta:
StudentsGrades.GroupBy(student => student.Name)
.OrderBy(studentGradesGroup => studentGradesGroup.Max(student => student.Grade));
Pero eso devuelve IEnumerable
IGrouping
, y no tengo manera de ordenar la lista en el interior, a menos que yo hazlo en otra consulta foreach
y agrega los resultados a una lista diferente usando AddRange
.
¿Hay alguna forma más bonita de hacerlo?
No hay ninguna propiedad clave en ese grupo variable var. –
@David B: Whoops, corregido. –
¡Gracias! Esta es la consulta finalizada - studentGrades.GroupBy (student => student.Name) .Select (group => new {Students = group.OrderByDescending (x => x.Grade)}) .OrderByDescending (group => group. Students.Primero(). Grado) .SelectMany (group => group.Students) – Rita