Все элементы в запросе списка с nHibernate - PullRequest
0 голосов
/ 11 апреля 2011

Я знаю, что есть ограничение «В», которое позволяет определять, находится ли один или несколько элементов в свойстве в списке целей, но мне нужно что-то, что сообщало бы мне, все ли элементы из свойства находятся в целевом списке. Вот пример:

Я хочу человека со всеми этими компетенциями

CompetenciesCriterion : IList<Competency>
  { Walking, Running, Rolling }

Между PersonA и PersonB:

PersonA : Person
  Competencies : IList<Competency>
    { Walking }

PersonB : Person
  Competencies : IList<Competency>
    { Walking, Rolling, Running }

Есть ли ограничение или выражение, которое позволило бы мне выполнить этот поиск, или вы знаете чистый способ сделать это вместо того, чтобы складывать «In» в «конъюнкцию»?

Заранее спасибо,

Этьен Бруйяр

1 Ответ

0 голосов
/ 12 апреля 2011

Я нашел способ получить желаемый результат. Укладка «In» не работает, поэтому я понял, что использование подзапроса и подсчет «In» создаст критерий, по которому я могу проверить условие, что количество равно.

Вот пример:

var competencySubQuery = DetachedCriteria.For<Employee>("employee2");
competencySubQuery.CreateAlias("employee2.Competencies", "employee2Competencies");
competencySubQuery.SetProjection(Projections.Count(Projections.Property("employee2Competencies.Competency")));
competencySubQuery.Add(Restrictions.In("employee2Competencies.Competency",     searchCriteria.Competencies));
competencySubQuery.Add(Restrictions.EqProperty("employee2.Id", "Employee.Id"));
criteriaJunction.Add(Subqueries.Eq(searchCriteria.Competencies.Count(), competencySubQuery));

criteriaJunction является критерием, используемым в конце для FindAll и searchCriteria являясь POCO, содержащим критерии, отправленные в сервис.

...