加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

Asp.Net Identity发现用户不在角色中

发布时间:2020-12-16 07:29:35 所属栏目:asp.Net 来源:网络整理
导读:我需要使用Asp.Net Identity找到所有不包含某个角色的用户. 到目前为止,我有类似的东西,但它不起作用. (From role In context.RolesFrom userRoles In role.UsersJoin us In context.Users On us.Id Equals userRoles.UserIdWhere role.Name "SomeRole"Selec
我需要使用Asp.Net Identity找到所有不包含某个角色的用户.
到目前为止,我有类似的东西,但它不起作用.

(From role In context.Roles
From userRoles In role.Users
Join us In context.Users On us.Id Equals userRoles.UserId
Where role.Name <> "SomeRole"
Select us.UserName)

这给了我一个所有用户的列表,但它包括角色“SomeRole”的用户.
它看起来我需要一些不在子查询中的类型?

这是可行的SQL代码,但如果可能的话,我仍然会喜欢LINQ查询.

select distinct A.UserName from AspNetUsers A
inner join AspNetUserRoles UR on UR.UserId = A.Id
inner join AspNetRoles R on R.Id = UR.RoleId
where not exists(
    select AspNetUserRoles UR1 on UR1.UserId = A.Id
    inner join AspNetRoles R1 on R1.Id = UR1.RoleId 
    where R1.Name = 'SomeRole')

嗯,我有一个有效的解决方案,但它不漂亮,我相信它可以写得更好.

(From role In context.Roles
From userRole In role.Users
Join user In context.Users On us.Id Equals userRole.UserId
Where Not (
    From role1 In context.Roles
    From userRole1 In role1.Users
    Join user1 In context.Users On user1.Id Equals userRoles1.UserId
    Where role1.Name = "SomeRole"
    Select user1.Id).Contains(user.Id)
Select user.UserName).Distinct()

解决方法

在c#中,您可以获得不属于某个角色的所有用户:

var role = context.Roles.SingleOrDefault(m => m.Name == "role");
var usersNotInRole = context.Users.Where(m => m.Roles.All(r => r.RoleId != role.Id));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读