作为NHibernate的新手,我继承了一些我必须修改的基本编码。我有一堆Group类型的对象。每个组可以有一个或多个Group类型的子项,并且子项可以再次具有Group类型的子项,依此类推。每个Group对象都有一个名为Deleted的属性/字段,其值为" deletedgroup" (一种软删除)。如果某个组的已删除字段设置为" deletedgroup"不应该选择,孩子和大孩子也应该选择。换句话说,我需要获取所有未将删除字段设置为" deletedgroup"的组的列表。 我继承了这段代码,但它没有包含新删除字段的标准,即代码检索所有组。 如何扩展代码以满足我的请求。我已经尝试过.Where和.Criteria,但是我得到编译错误,但限制不起作用。
Enherited代码(选择所有组):
var allGroups = ObjectFactory.GetInstance<IUnitOfWork>().Session
.QueryOver<Group>()
.Fetch(g => g.ChildGroups).Eager
.Fetch(g => g.Vacancies).Eager
.TransformUsing(new DistinctRootEntityResultTransformer())
.List();
答案 0 :(得分:0)
我通常赞成使用NH的LINQ
查询,因为我发现语法更直观。 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();
也许尝试一下,看看它是否具有预期的效果。