我正在尝试获取父项列表,其中子集合不包含特定类型的项目。 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>();
这似乎没有返回正确的实体 - 它只是将它们全部返回。
答案 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。