在ASP.NET core 3.0中,当我应用Except()方法时,出现以下异常

问题描述 投票:0回答:1

InvalidOperationException:处理LINQ表达式'Except

我正在使用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时,我仍然会得到异常。有任何想法吗?我是编程的新手。

c# asp.net-core asp.net-identity role-manager
1个回答
2
投票

查询提供者无法将linq表达式转换为查询。

foreach处引发异常,因为那是在枚举可查询对象并对源执行该可查询对象时。

使用AsEnumerable将用户加载到内存中。

var usersNotInRole = userManager.Users.AsEnumerable().Except(usersInRole);
© www.soinside.com 2019 - 2024. All rights reserved.