为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取某个角色的用户数量

如何获取某个角色的用户数量

C#
慕尼黑5688855 2023-08-20 15:00:51
我想获取分配给某个角色的用户数量,如下所示,参见图片我也检查了这篇文章,但没有帮助我。我的角色视图模型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 对用户进行了计数,但我不知道如何对所有用户执行此操作。如果有人可以帮助我,我将非常感激。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

可能有更好的方法来做到这一点,但至少这似乎适用于我的数据库。


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 的列表,其中属性 count 表示具有特定角色的用户数量。考虑到您可以拥有一个用户和多个用户,因此计数总和可能与用户总和不同。


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信