NHibernate返回所有有孩子的父母

NHibernate返回所有有孩子的父母,nhibernate,Nhibernate,我有一个家长和孩子班 class Parent { bool Enable; List<Child> Children; } class Child { bool Enable; } 类父类 { 布尔使能; 列出儿童名单; } 班童 { 布尔使能; } 我想返回Enable=true的所有父级,并且该父级应该包含Enable=true的所有子级 我创建了以下内容 var parents = Session.QueryOver<Parent>().Where(

我有一个家长和孩子班

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>();
var parents=Session.QueryOver()。其中(p=>p.Enabled)
.JoinQueryOver(p=>p.Children)。其中(c=>c.Enabled)
.List();
它返回正确的父项(所有的Enable=true),但返回所有的child(即使Enable=false)


有人能帮我纠正我的疑问吗?

你应该在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);
var children=Session.QueryOver(c=>c.children)
.Where(c=>c.Enabled&&c.Parent.Enabled)
.Fetch(c=>c.Parent)//这将在查询中包括父项,因此
.List()//避免选择N+1
var childrenByParent=children.GroupBy(x=>x.Parent);

您应该返回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);
var children=Session.QueryOver(c=>c.children)
.Where(c=>c.Enabled&&c.Parent.Enabled)
.Fetch(c=>c.Parent)//这将在查询中包括父项,因此
.List()//避免选择N+1
var childrenByParent=children.GroupBy(x=>x.Parent);

我在答案中添加了一个示例。我在答案中添加了一个示例。