我如何获得MVC5 web应用程序中所有管理员的列表

本文关键字:管理员 列表 应用程序 何获得 MVC5 web | 更新日期: 2023-09-27 18:18:04

我想使用EntityFramework运行查询

   Get(u => u.Roles.Contains("Administrator"));

,其中Get操作与教程中的操作相同:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

我想这样使用它,因为我需要它通过DbContext,因为它只是来自控制器的一行,我想保持请求的一致性。

所以我的问题是你如何做到这一点,什么是最好的方式来获得所有用户的特定角色?

编辑:

下面是我最终使用的代码:

        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
        string roleId = roleManager.FindByName("Administrator").Id;
        return Get(x => x.Roles.Select(y => y.RoleId).Contains(roleId));

我如何获得MVC5 web应用程序中所有管理员的列表

另一个答案很接近,但您需要先查找Administrators角色的RoleId(因为不幸的是,IdentityUserRole没有Name属性)。一旦你得到了这些,它就相对简单了。

在下面的示例中,我嵌套了另一个查询,以提取Roles的集合中至少有一个IdentityUserRole具有特定RoleId的所有用户

// Add code to look up the appropriate RoleId below.
var roleId = 1; 
Get(u => u.Roles.Any(r => r.RoleId == roleId));

如果不确定如何执行查找,请参考相关SO问题

上的答案。

您没有按照预期的方式使用.Contains()。查看文档:http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains(v=vs.100).ASPX

Doc说它"确定一个序列是否包含一个指定的元素。"是否表示T/F。它不会抓取包含指定角色的用户。您需要使用.Where()扩展。它可能看起来像这样:

var users = userRepo.Where(u => u.Roles.Contains(r => r.Name == "Administrator"));

那么现在,您将获得用户,其中任何角色都包含名称为"Administrator"的角色

尝试U.Roles.Name == "Administrator"或类似的东西?