Mam za zadanie napisać pytanie, które wyciąga z bazy danych userów posiadające permissiony pasujące do permissionNames. Nie mogę wyciągnąć ani adminów, ani master adminów, jako że wyprowadzam dane do listy userów. Problem jednak w tym, że admini/masterzy mogą posiadać więcej ról niż admin, stąd są oni uwzględniani w zapytaniu. Miałby ktoś pomysł, jak zmodyfikować to zapytanie, żeby zwracało tylko tych użytkowników, gdzie żadna z ról nie równa się adminowi/master adminowi?
return (from user in dbcontext.Users
join userRole in dbcontext.UserRoles on user.Id equals userRole.UserId
join role in dbcontext.Roles on userRole.RoleId equals role.Id
join permission in dbcontext.RolePermissions on role.Id equals permission.RoleId
where permissionNames.Any(name => name == permission.Name)
&& role.Name != Consts.MasterAdmin
&& role.Name != Consts.Admin
select new { user, permission }).GroupBy(grp => grp.user)
.Where(grp => permissionNames.All(name => grp.Any(record => record.permission.Name == name)))
.Select(grp => grp.Key);