使用UserManager .Net Core过滤用户角色

时间:2016-05-23 07:40:26

标签: c# asp.net asp.net-core asp.net-identity-3

我遇到了过滤用户角色的问题。仅对查询进行过滤可以很好地单独使用。

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));

1 个答案:

答案 0 :(得分:0)

通过将应用程序从RC1移植到RC2

,解决了这个问题

所以我觉得可以说这是RC1中的一个错误。