我如何获得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));
另一个答案很接近,但您需要先查找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"
或类似的东西?