5

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

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. No compile errors.

Anders
  • 375
  • 2
  • 5
  • 18

5 Answers5

9

You can use bellow code for retrieve all users in specific role (Identity 2.x.x):

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

or for synchronize usage:

var users = _userManager.GetUsersInRoleAsync("RoleName").GetAwaiter().GetResult();
Sajad Afaghiy
  • 524
  • 5
  • 12
2
var usersInRole = db.Users.Where(m => m.Roles.RoleId == role.Id)).ToList();

You search through all the users and returns the ones that fit a specific role id

Eminem
  • 7,206
  • 15
  • 53
  • 95
1

Have you tried to use navigation properties Lazy Loading ?

var role = db.Roles.SingleOrDefault(m => m.Name == "User");
var usersInRole = role.Users;
Pedro Benevides
  • 1,970
  • 18
  • 19
  • Error "The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Dignitana.Models.ApplicationUser]'." – Anders Mar 29 '16 at 12:47
0

you can use Linq expression base query like below :

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

For Identity 2.0... and .NET Framework 4.5+

Check IdentityConfig.cs to make sure that the role manager is configured correctly.

var roleManager = HttpContext.GetOwinContext().GetUserManager();

var users = roleManager.FindByName("Administrator").Users.ToList();

Beau
  • 71
  • 2
  • 5