Я хочу вернуть список пользователей, которые фильтруют их конкретные роли. У пользователя может быть несколько ролей, но список пользователей всегда исключает пользователей, для которых одна из ролей является «ОСНОВНОЙ». Я включил два условия в метод where()
, но список фильтрует только первое условие.
IList<Account> users = _context.Account.AsNoTracking()
.Include(a => a.Profile)
.Include(a => a.AccountRole)
.ThenInclude(r => r.Role)
.Where(a => (a.Organization == "My Company") &&
(a.AccountRole.Any(r => r.Role.Name != "PRIMARY")))
.ToList();
Ах да, глупый я. Большое спасибо !!!
a.AccountRole.Any(r => r.Role.Name != "PRIMARY")
Написано так, это означает
all the users which have at least one role not being "PRIMARY"
Вместо этого вы хотите:
!a.AccountRole.Any(r => r.Role.Name == "PRIMARY")
all the users which do not have any role being "PRIMARY"
Хорошее объяснение. 1+
exclude users who have one of roles as 'PRIMARY'
Итак, по логике: так и должно быть.
IList<Account> users = _context.Account.AsNoTracking()
.Include(a => a.Profile)
.Include(a => a.AccountRole)
.ThenInclude(r => r.Role)
.Where(a => !a.AccountRole.Any(r => r.Role.Name == "PRIMARY") // can't contain a role PRIMARY
&& a.Organization == "My Company")
.ToList();
@ HoàngNguyễn Кам для голосования
Я думаю, проблема во втором условии - предложении where. Не могли бы вы попробовать изменить его как:
IList<Account> users = _context.Account.AsNoTracking()
.Include(a => a.Profile)
.Include(a => a.AccountRole)
.ThenInclude(r => r.Role)
.Where(a => (a.Organization == "My Company") &&
(! a.AccountRole.Any(r => r.Role.Name == "PRIMARY")))
.ToList();
Это может сработать, поскольку второе условие будет работать только в том случае, если в AccountRole нет «ПЕРВИЧНОЙ» роли.
Вам следует отредактировать a.AccountRole.Any(r => r.Role.Name != "PRIMARY")
на !a.AccountRole.Any(r => r.Role.Name != "PRIMARY")
.
На это был дан ответ три раза, прежде чем вы разместили эту 4-ю версию того же ответа. И, вы ошиблись, оставив этот !=
!a.AccountRole.Any(r => r.Role.Name == "PRIMARY")
очень отличается отa.AccountRole.Any(r => r.Role.Name != "PRIMARY")