NHibernate让所有有孩子的父母都有条件

时间:2012-05-26 19:12:02

标签: nhibernate

我有一个父类和子类

class Parent
{
 bool Enable;
List<Child> Children;
}
class Child
{
bool Enable;
}

我想返回所有父级,其中Enable = true且该父级应包含所有子级,其中Enable = true

我创建了以下

    var parents = Session.QueryOver<Parent>().Where(p => p.Enabled)
        .JoinQueryOver<Child>(p => p.Children).Where(c=>c.Enabled)
        .List<Parent>();

它返回正确的父项(所有其中Enable = true),但它返回所有子项(即使enable = false)

有人可以帮我纠正我的查询吗?

1 个答案:

答案 0 :(得分:1)

您应该返回Enable = true的子项并加入其父项。然后,您可以使用linq将其分组。

这样的事情:

var children = Session.QueryOver<Child>(c => c.Children)
                      .Where(c => c.Enabled && c.Parent.Enabled)
                      .Fetch(c => c.Parent) //This will include the parents in the query so you
                      .List<Child>();       //avoid a Select N+1

var childrenByParent = children.GroupBy(x => x.Parent);