То, что я хотел бы сделать, это
public override Task<IList<string>> GetRolesAsync(ApplicationUser user, CancellationToken cancellationToken = default)
{
return Context.UserOrganisationRole
.Where(z => z.UserId == user.Id)
.GroupBy(z => new { z.RoleId, z.Role })
.Select(z => z.Key.Role.Name + "-" + string.Join(",", z.OrderBy(z => z.OrganisationId).Select(z => z.OrganisationId)))
.ToListAsync();
}
Но это не работает, потому что Task<List<string>>
не может быть приведено к Task<IList<string>>
.
Поэтому я попытался добавить
.ContinueWith<IList<string>>(t => t.Result, TaskContinuationOptions.ExecuteSynchronously);
из Ошибка преобразования типа при асинхронном c программировании , который компилируется, но не запускается, потому что:
Выражение LINQ <... > Не удалось перевести. Либо переписать запрос в форме, которую можно перевести, либо явно переключиться на оценку клиента, вставив вызов функции AsEnumerable (), ...
Что, я думаю, означает, что он пытается сделать слишком много в базе данных. Хорошо. Однако, добавив запрошенный IEnumerable
, теперь кажется невозможным получить требуемый Task<IList<string>>
для возврата
return Context.UserOrganisationRole
.Where(z => z.UserId == user.Id)
.AsEnumerable()
.GroupBy(z => new { z.RoleId, z.Role })
.Select(z => z.Key.Role.Name + "-" + string.Join(",", z.OrderBy(z => z.OrganisationId).Select(z => z.OrganisationId)))
Т.е. напишите это для меня!
public Task<IList<string>> ListToTaskIList (IList<string> list)
{
}