Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET core 3.0中,当我应用Except()方法时,会出现以下异常_C#_Asp.net Core_Asp.net Identity_Role Manager - Fatal编程技术网

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

C# 在ASP.NET core 3.0中,当我应用Except()方法时,会出现以下异常,c#,asp.net-core,asp.net-identity,role-manager,C#,Asp.net Core,Asp.net Identity,Role Manager,无效操作异常:处理LINQ表达式“异常” 我正在使用ASP.NETCore3.0中的身份识别系统制作一个网站。我有一个用户列表,其中一些被分配到角色。基本上,我正在尝试获取未分配到特定角色的用户列表 我实现这一点的方法是让所有用户减去已经分配到某个角色的用户。我正试图在Except()方法的帮助下实现这一点。以下是我的行动方法的基础: [HttpGet] public async Task<IActionResult> AddUsersToRole(string roleName)

无效操作异常:处理LINQ表达式“异常”

我正在使用ASP.NETCore3.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);
}
[HttpGet]
公共异步任务AddUsersToRole(字符串roleName)
{
IdentityRole role=await roleManager.FindByNameAsync(roleName);
if(角色!=null)
{
IList usersInRole=await userManager.GetUsersInRoleAsync(role.Name);
IQueryable usersnotinole=userManager.Users.Except(usersInRole);
列表模型=新列表();
//异常在这里被抛出。。。
//将数据复制到ViewModel
foreach(usersNotInRole中的var用户)
{
添加(新的AddUsersToRoleViewModel{UserId=user.Id});
}
返回视图(模型);
}

当我尝试从usersNotInRole对象读取数据时,会引发异常。即使我删除ViewModel并将usersNotInRole对象传递给视图,我仍然会收到异常。有什么想法吗?我是编程新手。

查询提供程序无法将linq表达式转换为查询

异常会在
foreach
上抛出,因为此时将枚举可查询项并对源执行

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

var usersNotInRole = userManager.Users.AsEnumerable().Except(usersInRole);

查询提供程序无法将linq表达式转换为查询

异常会在
foreach
上抛出,因为此时将枚举可查询项并对源执行

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

var usersNotInRole = userManager.Users.AsEnumerable().Except(usersInRole);

@Sea\u Ocean考虑到您只需要Id,您应该对用户和用户角色执行Select(x=>x.Id),以减少从数据库中获取的数据量。@ckuri感谢您指出这一点。我将在所有代码中完全这样做。它的可读性也更高。@Sea\u Ocean考虑到您只需要Id,您应该执行Select(x=>x.Id)来减少从数据库中获取的数据量。@ckuri感谢您指出这一点。我将在我的所有代码中完全做到这一点。它也更具可读性。