【问题标题】:Find users based on a specific role根据特定角色查找用户
【发布时间】:2018-01-26 21:45:54
【问题描述】:

我正在尝试根据我的应用程序中的特定角色查找所有用户。我目前有两个角色管理员和用户。当我尝试使用以下 linq 查询返回具有“用户”角色的用户列表时:

var users = context.Users
                .Where(u => u.Roles.Select(r => r.RoleId).Contains("User")).ToList();

它返回 0 个用户。我在这里看过类似的问题,但其中许多现在已经过时了。例如,我知道 RoleID 是一个散列键,而我正在搜索的是纯文本“用户”。

【问题讨论】:

  • FWIW,id 不是“散列键”,而是 GUID,作为字符串而不是实际的 Guid。这是 Identity 团队的一个有争议的选择,旨在实现最大程度的兼容性。不过,您可以将其更改为不同的类型,例如 int。请参阅:docs.microsoft.com/en-us/aspnet/identity/overview/extensibility/…。但是,这些都不会对您的问题产生有意义的影响。
  • 总是很高兴了解更多背景信息,谢谢克里斯

标签: asp.net-mvc linq asp.net-identity


【解决方案1】:

RoleId 与实际的角色名称字符串不同,这就是您没有得到任何匹配的原因。您需要这样做的方式是:

var roleId = context.Roles.Where(m => m.Name == "User").Select(m => m.Id).SingleOrDefault();

然后:

var users = context.Users
            .Where(u => u.Roles.Any(r => r.RoleId == roleId)).ToList();

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2012-10-26
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2020-09-03
    • 2021-09-17
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多