返回列表中包含的所有角色

时间:2019-04-04 07:01:37

标签: c# asp.net

尝试返回所有在字符串数组中指定角色的用户

我已经尝试了一个SO链接显示的后向逻辑,但是却几乎错过了我要完成的工作

  string[] userRoles = { "2", "5", "6" };

  var users = UserManager.Users.Where(x => x.Roles.Select(y => 
    y.RoleId).Contains("2").ToList();

这将明显返回具有roleId 2的用户。我要返回的是所有在数组中指定角色的用户

2 个答案:

答案 0 :(得分:4)

如果我了解您的要求,则可以使用WhereAnyContains

string[] userRoles = { "2", "5", "6" };

var users = UserManager.Users.Where(x => x.Roles.Any(y => userRoles.Contains(y.RoleId)))
                             .ToList();

答案 1 :(得分:1)

代替

UserManager.Users.Where(x => x.Roles.Select(y => y.RoleId).Contains("2").ToList();

您可以使用

UserManager.Users.Where(user => user.Roles.Any(r => userRoles.Any(ur=> ur == r.RoleId.ToString()))).ToList();

这里是说您希望所有具有userRoles表中存在的Ids角色的用户,这就是您要寻找的。