En mi aplicación .NET Core / EF Core tengo un modelo con una lista anidada de objetos secundarios. Cuando recupero una instancia, necesito que la lista anidada sea ordenada por una de las propiedades del niño. Entiendo que revisé preguntas similares y problemas reportados en EF Core que no puedo ordenar la lista anidada al recuperar la instancia. Así que ahora estoy tratando de ordenarlo una vez cargado en la memoria. Pero aquí tampoco tengo éxito.
Estoy usando un patrón de repositorio para acceder a DbContext.
¿Cuál es la forma correcta de ordenar esta lista para que siempre se devuelva ordenada correctamente desde mi repositorio?
Lo último que probé:
public async Task<Parent> GetParent(int id)
{
var loadedInMemory = context.Parents
.Include(p => p.Children)
.SingleOrDefaultAsync(p => p.Id == id);
var result = loadedInMemory.Result.Children.OrderBy(c => c.Sequence);
// When I order within the Task<Parent>, result becomes IOrderedEnumerable
// and I can't return it.
return await result;
}
El resultado que está intentando devolver es la lista ordenada de hijos. Eso no es lo que quieres. En su lugar, ordene a los hijos y luego devuelva al padre:
public async Task<Parent> GetParent(int id)
{
var parent = context.Parents
.Include(p => p.Children)
.SingleOrDefaultAsync(p => p.Id == id);
parent.Result.Children = parent.Result.Children.OrderBy(c => c.Sequence).ToList();
return await parent;
}