C# 在ASP.NET core 3.0中,当我应用Except()方法时,会出现以下异常
无效操作异常:处理LINQ表达式“异常” 我正在使用ASP.NETCore3.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)
[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感谢您指出这一点。我将在我的所有代码中完全做到这一点。它也更具可读性。