NHibernate获取包括儿童和一个条件
问题描述:
对NHibernate来说是相对新的我已经继承了一些我必须修改的基本代码。我有一堆类型为Group的对象。每个组可以有一个或多个类型为Group的孩子,孩子也可以有Group类型的孩子等等。每个Group对象都有一个名为Deleted的属性/字段,其值为“deletedgroup”(一种软删除)。如果一个组的“已删除”字段设置为“已删除组”,则不应该选择,所以儿童和大孩子也应该这样选择。换句话说,我需要获得没有将删除字段设置为“已删除组”的所有组的列表。 我有这段代码被继承,但它没有包含新的删除字段的标准,即代码检索所有组。 如何扩展代码以满足我的请求。我已经尝试过.Where和.Criteria,但是我得到了编译错误和限制不起作用。NHibernate获取包括儿童和一个条件
Enherited代码(选择所有组):
var allGroups = ObjectFactory.GetInstance<IUnitOfWork>().Session
.QueryOver<Group>()
.Fetch(g => g.ChildGroups).Eager
.Fetch(g => g.Vacancies).Eager
.TransformUsing(new DistinctRootEntityResultTransformer())
.List();
答
我通常有利于LINQ
查询与NH因为我发现的语法更直观。 NH的LINQ提供商并不完美,有时候QueryOver
远远优于此。然而,在这种情况下,我觉得这LINQ
基于查询应为你工作:
var activeGroupIds =
ObjectFactory.GetInstance<IUnitOfWork>().Session
.Query<Group>()
.Where(g => g.Deleted != "deletedgroup")
.Select(g => g.Id);
var allGroups =
ObjectFactory.GetInstance<IUnitOfWork>().Session
.Query<Group>()
.FetchMany(g => g.ChildGroups)
.FetchMany(g => g.Vacancies)
.Where(g => activeGroupIds.Contains(g.Id))
.ToList();
也许试试这个,看看它是否有预期的效果。
没有工作。看起来像where子句过滤出每个组,所以结果为零组,就像我经历过使用带有where子句的orignal查询一样。 省略where子句将返回所有组作为原始查询。 – Torben
啊。那么你是否需要类似相关的子查询,它首先找到符合条件的组并使用“Deleted!=”deletedgroup“',然后只返回该列表中的组? –
我用这个概念编辑了我的答案,但我不确定这正是你要找的。 –