В ASP.NET core 3.0 я получаю следующее исключение при применении метода Except () - PullRequest
1 голос
/ 03 ноября 2019

InvalidOperationException: Обработка выражения LINQ 'Кроме

Я использую систему удостоверений в ASP.NET core 3.0 для создания веб-сайта. У меня есть список пользователей, некоторым из которых назначены роли. По сути, я пытаюсь получить список пользователей, которым НЕ назначена определенная роль.

Мой способ реализовать это - получить всех пользователей, кроме тех, кто уже назначен на роль. Я пытаюсь сделать это с помощью метода Except (). Вот основы моего метода действия:

[HttpGet]
public async Task<IActionResult> AddUsersToRole(string roleName)
{
    IdentityRole role = await roleManager.FindByNameAsync(roleName);
    if (role != null)
    {
        IList<ApplicationUser> usersInRole = await userManager.GetUsersInRoleAsync(role.Name);
        IQueryable<ApplicationUser> usersNotInRole = userManager.Users.Except(usersInRole);
        List<AddUsersToRoleViewModel> models = new List<AddUsersToRoleViewModel>();

    // Exception is thrown here...
    // Copy data to ViewModel
    foreach (var user in usersNotInRole)
    {
        models.Add(new AddUsersToRoleViewModel { UserId = user.Id });
    }

    return View(models);
}

Исключение выдается, когда я пытаюсь прочитать данные из объекта usersNotInRole. Даже когда я удаляю ViewModel и просто передаю объект usersNotInRole в View, я все равно получаю исключение. Есть идеи? Я новичок в программировании.

1 Ответ

2 голосов
/ 03 ноября 2019

Поставщик запросов не может преобразовать выражение linq в запрос.

Исключение выдается в foreach, потому что это то, когда запрос перечисляется и выполняется для источника.

Используйте AsEnumerable для загрузки пользователей в память.

var usersNotInRole = userManager.Users.AsEnumerable().Except(usersInRole);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...