У меня есть таблица пользователей и ролей. Пользователь может иметь несколько ролей.
Я хочу захватить всех пользователей без определенной роли. Проблема в том, что если у пользователя есть две роли, одна из которых нам не нужна, он все равно будет возвращен.
public IList<User> GetUserByWithoutRole(string role)
{
return CreateQuery((ISession session) => session.CreateCriteria<User>()
.CreateAlias("Roles", "Roles")
.Add(!Restrictions.Eq("Roles.RoleDescription", role))
.List<User>());
}
Единственное решение, которое я придумал, было на стороне клиента
public IEnumerable<User> GetUserByWithoutRole(string role)
{
return CreateQuery((ISession session) => session.CreateCriteria<User>()
.CreateAlias("Roles", "Roles")
.Add(!Restrictions.Eq("Roles.RoleDescription", role))
.List<User>()).Where(u => u.Roles.FirstOrDefault(r => r.RoleDescription == role) == null);
}
Кто-нибудь знает лучшее решение? Спасибо!