查找子集合中不包含具有特定属性值的项目的父项

时间:2010-04-28 21:46:26

标签: nhibernate

我正在尝试获取父项列表,其中子集合不包含特定类型的项目。 LINQ等价物将类似于:

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

对象模型是Parent>儿童(项目)>输入>代码

如果Parent是我的聚合根,我将如何在NHibernate条件/查询中对此进行建模?这是我的第一次尝试:

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

这似乎没有返回正确的实体 - 它只是将它们全部返回。

1 个答案:

答案 0 :(得分:0)

使用HQL比使用Criteria更容易:

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

您将获得预期的结果,而无需DistinctRootEntity。