简体   繁体   English

获取角色中的所有用户。 ASP.NET身份

[英]Get all users within a role. ASP.NET Identity

I can get all users like this 我可以得到这样的所有用户

var users = UserManager.Users.ToList();

I can find a role like this 我可以找到这样的角色

var role = db.Roles.SingleOrDefault(m => m.Name == "User");

I want to list all users with the role name "User" in the AspNetRoles table (I have User and Admin ). 我想在AspNetRoles表中列出角色名为“User”的所有用户(我有UserAdmin )。

var role = db.Roles.SingleOrDefault(m => m.Name == "User");
var usersInRole = db.Users.Where(m => m.Roles.Any(r => r.RoleId == role.Id)).ToList();

return View(usersInRole);

I get the role in var role but userInRole gives me Count = 0 when I debug. 我在var role获得角色,但是当我调试时, userInRole给了我Count = 0 No compile errors. 没有编译错误。

You can use bellow code for retrieve all users in specific role (Identity 2.xx): 您可以使用以下代码检索特定角色(Identity 2.xx)中的所有用户:

var users = await _userManager.GetUsersInRoleAsync("RoleName");

or for synchronize usage: 同步使用:

var users = _userManager.GetUsersInRoleAsync("RoleName").Result;
var usersInRole = db.Users.Where(m => m.Roles.RoleId == role.Id)).ToList();

您搜索所有用户并返回符合特定角色ID的用户

Have you tried to use navigation properties Lazy Loading ? 您是否尝试使用导航属性Lazy Loading?

var role = db.Roles.SingleOrDefault(m => m.Name == "User");
var usersInRole = role.Users;

you can use Linq expression base query like below : 您可以使用如下所示的Linq表达式基本查询:

var roleUserIdsQuery=from role in db.Roles 
                where role.Name=="User"
                from user in role.Users
                select user.UserId;
var users=db.Users.Where(u=>roleUserIdsQuery.Contains(u.Id)).ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM