如何过滤ICollectionASP中的一个角色.. NET MVC 5's

本文关键字:NET 角色 一个 MVC ICollection 过滤 何过滤 ApplicationUser ASP | 更新日期: 2023-09-27 17:54:15

我增加了3个角色:

  1. 管理员
  2. 员工

现在我想显示所有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();

如果这是低效的,我很乐意听到为什么和如何我可以改进它。

如何过滤ICollection<ApplicationUser>ASP中的一个角色.. NET MVC 5's

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

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

不幸的是(和误导),这返回UserRoles的列表,但至少你有用户的UserId s,并从那里,可以获取Users