我有一个角色。如何找到具有该角色的用户列表?
public ViewResult Index()
{
return View(roleManager.RoleList.ToList());
}
在这种方法中,我将获得角色列表,其中包含用户的UsersId
。现在如何将其与我的UserModel
链接以使用UserName
?
我对LINQ不太好,找不到好主意
结果是我想在视图中创建一个表
foreach (RoleModel role in Model)
{
<tr>
<td>@role.Id</td>
<td>@role.Name</td>
<td>@role.Description</td>
<td>
@if (role.Users == null || role.Users.Count == 0)
{
@: Нет пользователей в этой роли
}
else
{
//User name which have that role
}
</td>
</tr>
}
答案 0 :(得分:0)
这是 ASP.NET Identity 的遗漏设计之一,没有捷径可以获取角色及其相关的用户< / strong>。但是您可以付出一些额外的努力,如下所示:
public class RoleViewModel
{
public string RoleId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<UserViewModel> Users { get; set; }
}
public class UserViewModel
{
public string UserId { get; set; }
public string UserName { get; set; }
}
public ViewResult Index()
{
List<RoleViewModel> rolesWithUsers = new List<RoleViewModel>();
List<ApplicationRole> applicationRoles = RoleManager.Roles.Include(r => r.Users).ToList();
foreach (ApplicationRole applicationRole in applicationRoles)
{
RoleViewModel roleViewModel = new RoleViewModel()
{
RoleId = applicationRole.Id,
Name = applicationRole.Name,
Description = applicationRole.Description
};
List<UserViewModel> usersByRole = UserManager.Users.Where(u => u.Roles.Any(r => r.RoleId == applicationRole.Id))
.Select(u => new UserViewModel
{
UserId = u.Id,
UserName = u.UserName
}).ToList();
roleViewModel.Users = usersByRole;
rolesWithUsers.Add(roleViewModel);
}
return View(rolesWithUsers);
}
现在每个角色将拥有其关联的用户。
注意:从性能的角度来看,上述解决方案不是一个好的选择。这就是为什么总是将 ASP.NET身份实体与您自己的DbContext
而不是默认IdenityStote
一起使用的原因。