Nella mia applicazione .NET Core / EF Core ho un modello con un elenco annidato di oggetti figlio. Quando richiamo un'istanza, ho bisogno che l'elenco nidificato sia ordinato da una delle proprietà del bambino. Capisco dal riesame di domande simili e ha segnalato problemi su EF Core che non riesco a ordinare l'elenco annidato sul recupero dell'istanza. Quindi ora sto cercando di ordinarlo una volta caricato in memoria. ma anche qui non ho successo.
Sto usando un pattern di repository per accedere a DbContext.
Qual è il modo corretto per ordinare questo elenco in modo che venga sempre ordinato correttamente dal mio repository?
L'ultima volta che ho provato:
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;
}
Il risultato che stai cercando di restituire è la lista ordinata di bambini. Non è quello che vuoi. Invece ordina i bambini e poi restituisci il genitore:
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;
}