我添加了3个角色:
现在我想显示所有Registered
个用户的列表。
我担心我没有获得身份系统,因为我试图做这样的事情:
剧透警报:不工作代码
var listOfNames = _unitOfWork.UserRepository.All()
.Where(u => u.Roles.Contains("Registered"))
.ToList();
这显然不起作用,所以我去寻找答案。不幸的是我没有得到任何。我能找到的最接近的是斯科特艾伦的一篇帖子,他提到IUserRoleStore
有以下实现:
但仍然没有得到它:/
我也尝试了this Question中的方法,但是Roles.Select(r => r.Name).Contains("client")
不起作用,因为无法找到Name属性?
如何获取ApplicationUser对象列表?
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();
如果效率低下,我很想知道为什么以及如何改进它。
答案 0 :(得分:2)
假设AspNetIdentity2.0 ...我发现你正在使用存储库模式,那么你可以使用RoleManager
:
var users = RoleManager.Roles.Single(x => x.Name == "Registered").Users;
不幸的是(并且误导性地)这会返回UserRoles
的列表,但至少您已经获得了用户' UserId
,从那里可以获取Users
。