Мне нужно найти всех пользователей, которые DONT'T содержат определенную роль, используя Asp.Net Identity.
До сих пор у меня есть что-то вроде этого, но оно не работает.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()
Извините выше код был в VB, но в C# это = я не маркировать статью! как VB или C#. – goroth