到目前为止我找到的示例似乎包括使用context.roles.name
并且在身份2中不存在。如果确实如此,我会做出如下声明:
Context.Users.Where(u => u.roles.Any(r => r.name == "Administrator")).ToList();
但是Roles只有RoleId和UserId属性。因此,为了获得RoleId,我使用两个这样的语句:
var adminRole = db.Roles.Where(r => r.Name == "Administrator").FirstOrDefault();
string adminRoleId = (adminRole != null) ? adminRole.Id : "";
var students = db.Users.Where(u => u.Roles.Any(r => r.RoleId == adminRoleId)).ToList();
这成功地为我提供了该角色的用户列表。 这是最佳做法吗?
我看到使用UserManager的另一种方式是这样的:
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
List<ApplicationUser> administrators = new List<ApplicationUser>();
foreach (var user in context.Users.ToList())
{
if (userManager.IsInRole(user.Id, "Administrator"))
{
Students.Add(user);
}
}
但是,如果我对用户执行CRUD操作,我似乎只想使用UserManager。