0

我添加了 3 个角色:

  1. 管理员
  2. 职员
  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 对象列表?

更新


肖恩的回答帮助我更深入地挖掘。我不确定这是最好的方法,但它可以满足我的需要。

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();

如果这效率低下,我很想听听为什么以及如何改进它。

4

1 回答 1

2

假设 AspNetIdentity2.0...我看到您正在使用存储库模式,所以在那里,您可以使用RoleManager

var users = RoleManager.Roles.Single(x => x.Name == "Registered").Users;

不幸的是(并且具有误导性)这会返回一个列表,UserRoles但至少您已经获得了用户UserId的列表,并且可以从那里获取Users.

于 2014-03-26T21:32:20.773 回答