Поиск родителей, в которых дочерняя коллекция не содержит элемент с определенным значением свойства - PullRequest
0 голосов
/ 29 апреля 2010

Я пытаюсь получить список родителей, в которых дочерняя коллекция не содержит элемент определенного типа. Эквивалент LINQ будет выглядеть примерно так:

dataset.Where(x => x.Items.FirstOrDefault(y => y.Type.Code == "ABC") == null)

Модель объекта Родитель> Дочерний элемент (Элементы)> Тип> Код

Если родительский объект является моим совокупным корнем, как бы я смоделировал это в критериях / запросах NHibernate? Вот моя первая попытка:

var results = session.CreateCriteria<Parent>()
    .CreateCriteria("Items")
    .CreateCriteria("Type")
    .Add(Restrictions.Not(Restrictions.Eq("Code", "ABC")))
    .SetResultTransformer(Transformers.DistinctRootEntity)
    .List<Parent>();

Похоже, это не возвращает нужные объекты - просто возвращает их все.

1 Ответ

0 голосов
/ 29 апреля 2010

С HQL это сделать проще, чем с критериями:

from Parent
where id not in
      (select p.Id
       from Parent p
       join p.Items item
       where item.Type.Code = 'ABC')

Вы получите ожидаемый результат без необходимости в DistinctRootEntity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...