Как уже упоминалось, ошибка возникает при попытке вызвать Select
на Task<T>
, что недопустимо.Тем не менее, проблема гораздо больше, чем это.В настоящее время код получает всю таблицу из базы данных, чтобы получить несколько значений из результата в памяти .Это бесполезная трата времени на обработку как в базе данных, так и на сервере приложений.
Не только это, но и использование потока пула потоков для ожидания операции ввода-вывода - это еще одна трата.
В целом код должен выглядеть примерно так.
public async Task<List<ApplicationUser>> GetApplicationUsersAsync()
{
// use Entity Framework properly with ToListAsync
// this returns the entire table
return await _context.Users.ToListAsync();
}
public async Task<List<StudentViewModel>> GetStudentsAsync()
{
// use Entity Framework properly with ToListAsync
return await _context.Users
// this only returns the 2 needed properties
.Select(x => new StudentViewModel
{
Forename = x.Forename,
Surname = x.Surname
})
.ToListAsync();
}
public async Task<StudentIndexViewModel> CreateStudentRegisterViewModel()
{
var model = new StudentIndexViewModel();
model.Students = await _studentRepo.GetStudentsAsync();
return model;
}