que tienen estas dos entidades:agrupar y múltiples ordenamientos utilizando LINQ a Entidades
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual ICollection<Class> Classes { get; set; }
}
public class Class
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; } ]
public Course Course { get; set; }
}
Ahora necesito una lista de cada agrupación de alumnos por curso y ordenado por (descendente) Course.StartDate luego por Class.StartTime. puedo conseguir agrupar por curso y el orden por Course.StartDate:
var myList = context.Classes
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate).ToList()
Pero no consigo también disponga que cada clase por que es Hora de inicio. He intentado esto:
var myList = context.Classes
.OrderBy(c => c.StartTime)
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate).ToList()
E incluso esto:
var myList = context.Classes
.GroupBy(c => c.Course)
.OrderByDescending(g => g.Key.StartDate)
.ThenBy(g => g.Select(c => c.StartTime)).ToList()
pero las clases no están clasificadas por que es Hora de inicio.
* Editar para una mejor aclaración: Se trata de un servicio web y tengo que devolver un List<IGrouping<Course, Class>>
y realmente quiero una manera elegante de hacer esto (es decir, utilizando sólo LINQ), sin crear manualmente la lista. A menos que no sea posible, por supuesto.
Cualquier ayuda es apreciada (estoy usando EF-code-first 4.3 btw).
Esta es probablemente su mejor opción. 'ToLookup' devuelve un' ILookup ', que implementa' IEnumerable > ', lo que significa que puede pasar eso al servicio web (puede que tenga que lanzarlo, pero eso no debería ser un problema). –
SPFiredrake
Lo resolví con una solución provisional de hack, pero esto es mucho más elegante. –