我遇到了过滤用户角色的问题。仅对查询进行过滤可以很好地单独使用。
var result =
_userManager.Users.Where(a =>
(a.UserName.Contains(query) || a.Email.Contains(query))
&& !a.Roles.Any(b => b.RoleId == roleId));
我得到的错误是
SqlException:在上下文中指定的非布尔类型的表达式 在预期条件的地方,靠近')'。
然后我想嗯,嘿,关于Roles的信息说导航财产,也许我需要包括?
var result =
_userManager.Users.Include(a=> a.Roles).Where(a =>
(a.UserName.Contains(query) || a.Email.Contains(query))
&& !a.Roles.Any(b => b.RoleId == roleId));
嗯,它仍然没有像预期的那样工作,但至少还有另一个错误。
SqlException:在上下文中指定的非布尔类型的表达式 在预期条件的地方,靠近'ORDER'。
所以现在我必须使用这个丑陋的解决方法
var result =
_userManager.Users.Include(a=> a.Roles).Where(a =>
(a.UserName.Contains(query) || a.Email.Contains(query))
/*&& !a.Roles.Any(b => b.RoleId == roleId)*/).ToList();
var result2 = _userManager.GetUsersInRoleAsync(_roleManager.FindByIdAsync(roleId).Result.Name).Result.ToList();
return PartialView("Partials/_UserList", result.Except(result2));
答案 0 :(得分:0)
通过将应用程序从RC1移植到RC2
,解决了这个问题所以我觉得可以说这是RC1中的一个错误。