如何过滤ICollectionASP中的一个角色.. NET MVC 5's
本文关键字:NET 角色 一个 MVC ICollection 过滤 何过滤 ApplicationUser ASP | 更新日期: 2023-09-27 17:54:15
我增加了3个角色:
- 管理员 员工
现在我想显示所有Registered
用户的列表。我担心我没有得到标识系统,因为我正在尝试做这样的事情:
剧透警报:不工作代码
var listOfNames = _unitOfWork.UserRepository.All()
.Where(u => u.Roles.Contains("Registered"))
.ToList();
这显然是行不通的,所以我去寻找答案。不幸的是,我什么也没得到。我能找到的最接近的是Scott Allen的一篇文章,他提到IUserRoleStore
有以下实现:
- 添加用户到角色
- 获取用户的所有角色
- 检查用户是否处于特定角色
- 从角色中删除用户
但还是不明白:/
我也尝试了这个问题中的方法,但是Roles.Select(r => r.Name).Contains("client")
不工作,因为找不到Name属性?
我如何获得这个ApplicationUser对象列表?
更新Sean的回答帮助我挖掘得更深一些。我不确定这是不是最好的方法,但它能满足我的需要。
var users = context.Users;
var roleUsers = context.Roles.Single(one => one.Name == "Registered").Users;
names = (from r in roleUsers
join u in users on r.UserId equals u.Id
select u.UserName).ToList();
如果这是低效的,我很乐意听到为什么和如何我可以改进它。
假设AspNetIdentity2.0…我看到你正在使用存储库模式,所以在那里,你可以使用RoleManager
:
var users = RoleManager.Roles.Single(x => x.Name == "Registered").Users;
不幸的是(和误导),这返回UserRoles
的列表,但至少你有用户的UserId
s,并从那里,可以获取Users
。