如何获取角色中的用户数
How to get the number of users in a role
我想获取分配给某个角色的用户数量,类似这样see pic
我也检查了 post 但没有帮助我。
我的 RoleViewModel
public class RolesViewModel
{
public RolesViewModel() { }
public RolesViewModel(ApplicationRole role)
{
Id = role.Id;
RoleName = role.Name;
}
public string Id { get; set; }
[Required]
[Display(Name = "Role Name")]
public string RoleName { get; set; }
public int Count { get; set; }
}
索引视图
@model IEnumerable<CMSRPPF.Areas.Admin.Models.RolesViewModel>
@{
ViewBag.Title = "Index";
Layout = "~/Areas/Admin/Views/Shared/_LayoutDashboard.cshtml";
}
<h2>Roles</h2>
<p>
@Html.ActionLink("Add Role", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.RoleName)
</th>
<th>
@Html.DisplayNameFor(model => model.Count)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.RoleName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Count)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</table>
控制器
public ActionResult Index()
{
ApplicationDbContext db = new ApplicationDbContext();
List<RolesViewModel> list = new List<RolesViewModel>();
foreach (var role in RoleManager.Roles)
{
var r = new RolesViewModel(role)
{
RoleName = role.Name,
Count = db.Users.Where(x=>x.Roles.Select(roles => roles.RoleId).Contains("4738a87a-4461-4b54-828b-1c5543f13bb2")).ToList().Count()
};
list.Add(r);
}
return View(list);
}
到现在为止,我设法根据特定角色的 RoleId 计算了用户数,但我不知道如何计算所有这些用户数。
如果有人能帮助我,我将不胜感激。
可能有更好的方法,但至少这似乎适用于我的数据库。
var result = from a in db.Roles
group a.Name by new { a.Id, a.Name } into g
select new RolesViewModel
{
Id = g.Key.Id,
RoleName = g.Key.Name,
Count = db.Users.Count(x => x.Roles.Select(k => k.RoleId).Contains(g.Key.Id))
}.ToList();
现在结果是一个 RolesViewModel 列表,其中 属性 计数表示具有特定角色的用户数量。考虑到您可以让一个用户拥有多个用户,因此计数总和可能与用户总和不同。
我想获取分配给某个角色的用户数量,类似这样see pic
我也检查了
我的 RoleViewModel
public class RolesViewModel
{
public RolesViewModel() { }
public RolesViewModel(ApplicationRole role)
{
Id = role.Id;
RoleName = role.Name;
}
public string Id { get; set; }
[Required]
[Display(Name = "Role Name")]
public string RoleName { get; set; }
public int Count { get; set; }
}
索引视图
@model IEnumerable<CMSRPPF.Areas.Admin.Models.RolesViewModel>
@{
ViewBag.Title = "Index";
Layout = "~/Areas/Admin/Views/Shared/_LayoutDashboard.cshtml";
}
<h2>Roles</h2>
<p>
@Html.ActionLink("Add Role", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.RoleName)
</th>
<th>
@Html.DisplayNameFor(model => model.Count)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.RoleName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Count)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</table>
控制器
public ActionResult Index()
{
ApplicationDbContext db = new ApplicationDbContext();
List<RolesViewModel> list = new List<RolesViewModel>();
foreach (var role in RoleManager.Roles)
{
var r = new RolesViewModel(role)
{
RoleName = role.Name,
Count = db.Users.Where(x=>x.Roles.Select(roles => roles.RoleId).Contains("4738a87a-4461-4b54-828b-1c5543f13bb2")).ToList().Count()
};
list.Add(r);
}
return View(list);
}
到现在为止,我设法根据特定角色的 RoleId 计算了用户数,但我不知道如何计算所有这些用户数。 如果有人能帮助我,我将不胜感激。
可能有更好的方法,但至少这似乎适用于我的数据库。
var result = from a in db.Roles
group a.Name by new { a.Id, a.Name } into g
select new RolesViewModel
{
Id = g.Key.Id,
RoleName = g.Key.Name,
Count = db.Users.Count(x => x.Roles.Select(k => k.RoleId).Contains(g.Key.Id))
}.ToList();
现在结果是一个 RolesViewModel 列表,其中 属性 计数表示具有特定角色的用户数量。考虑到您可以让一个用户拥有多个用户,因此计数总和可能与用户总和不同。