NHibernate获取包括孩子和标准

时间:2017-10-10 23:38:37

标签: c# .net sql-server nhibernate

作为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();

1 个答案:

答案 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();

也许尝试一下,看看它是否具有预期的效果。