Если вам нужно точное совпадение, вы можете использовать метод SequenceEqual
. Чтобы все заработало, вам нужно заказать ids
public IEnumerable<User> Handle(List<Guid> musthaveRoles)
{
var queryResult = Users.Where(
u => u.Roles.Select(r => r.RoleId).OrderBy(id => id)
.SequenceEqual(musthaveRoles.OrderBy(id => id)));
return queryResult;
}
Этот запрос вернет только тех пользователей, которые имеют те же роли, которые вы ожидаете, и отфильтрует пользователей, у которых больше ролей
<ч />
EDIT:
пользователи с большим количеством ролей должны быть также в queryResult
Вы можете использовать Intersect
метод:
public IEnumerable<User> Handle(List<Guid> musthaveRoles)
{
var queryResult = Users.Where(u => u.Roles.Select(r => r.RoleId)
.Intersect(musthaveRoles).Count() == musthaveRoles.Count);
return queryResult;
}
Проверьте демоверсию