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

我想获取分配给某个角色的用户数量,如下所示,参见图片

我也检查了这篇文章,但没有帮助我。

我的角色视图模型

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 对用户进行了计数,但我不知道如何对所有用户执行此操作。如果有人可以帮助我,我将非常感激。


慕尼黑5688855
浏览 91回答 1
1回答

繁华开满天机

可能有更好的方法来做到这一点,但至少这似乎适用于我的数据库。var result = from a in db.Roles&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;group a.Name by new { a.Id, a.Name } into g&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select new RolesViewModel&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Id = g.Key.Id,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RoleName = g.Key.Name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Count = db.Users.Count(x => x.Roles.Select(k => k.RoleId).Contains(g.Key.Id))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}.ToList();现在结果是 RolesViewModel 的列表,其中属性 count 表示具有特定角色的用户数量。考虑到您可以拥有一个用户和多个用户,因此计数总和可能与用户总和不同。
打开App,查看更多内容
随时随地看视频慕课网APP