将属性与单个值进行比较时,在多个子实体上限制fluent nhibernate queryover
我想使用Fluent Nhibernat中的QueryOver机制限制查询。我发现我可以使用WhereRestrictOn来实现这一点,但似乎不可能只与一个值进行比较。一种等质量的方法 我举个简单的例子也许能更好地解释我的问题所在将属性与单个值进行比较时,在多个子实体上限制fluent nhibernate queryover,nhibernate,fluent-nhibernate,queryover,Nhibernate,Fluent Nhibernate,Queryover,我想使用Fluent Nhibernat中的QueryOver机制限制查询。我发现我可以使用WhereRestrictOn来实现这一点,但似乎不可能只与一个值进行比较。一种等质量的方法 我举个简单的例子也许能更好地解释我的问题所在 class Parent{ IList<Child1> C1 {get;set;} IList<Child2> C2 {get;set;} } class Child1{ int Id {get;set;} } class
class Parent{
IList<Child1> C1 {get;set;}
IList<Child2> C2 {get;set;}
}
class Child1{
int Id {get;set;}
}
class Child2{
int Id {get;set;}
}
//What I can do
var result = session.QueryOver<Parent>()
.WhereRestrictionOn(x => x.C1.Id).IsIn(new[]{3})
.AndRestrictionOn(x => x.C2.Id).IsIn(new[]{5}).List();
//What I would like to do
var result = session.QueryOver<Parent>()
.WhereRestrictionOn(x => x.C1.Id).IsEqual(3)
.AndRestrictionOn(x => x.C2.Id).IsEqual(5).List();
类父类{
IList C1{get;set;}
IList C2{get;set;}
}
一级儿童{
int Id{get;set;}
}
儿童2班{
int Id{get;set;}
}
//我能做什么
var result=session.QueryOver()
.WhereRestrictionOn(x=>x.C1.Id).IsIn(新[]{3})
.AndRestrictionOn(x=>x.C2.Id).IsIn(新[]{5}).List();
//我想做什么
var result=session.QueryOver()
.WhereRestrictionOn(x=>x.C1.Id).IsEqual(3)
.AndRestrictionOn(x=>x.C2.Id).IsEqual(5.List();
所以基本上我的问题是,我无法与一个值进行比较,但总是必须人工创建一个数组。这是不可能的还是我遗漏了什么
如果可能的话,请告诉我怎么做。如果不可能的话,请解释一下原因
提前谢谢。我认为您需要一对子查询,而不是限制,但是您必须在
Child1
和Child2
中映射ParentID值
每个子查询都应该返回ParentID,其中childID是您的搜索值,然后您可以使用连词为两个子查询返回父查询,如果没有父查询,则返回null 试试这个:
Child1 c1Alias = null;
Child2 c2Alias = null;
var result = session.QueryOver<Parent>()
.InnerJoin(x => x.C1, () => c1Alias) // or use Left.JoinAlias
.InnerJoin(x => x.C2, () => c2Alias) // or use Left.JoinAlias
.Where(() => c1Alias.Id == 3)
.And(() => c2Alias.Id == 2)
.List();
Child1 c1Alias=null;
Child2 c2Alias=null;
var result=session.QueryOver()
.InnerJoin(x=>x.C1,()=>c1Alias)//或使用Left.JoinAlias
.InnerJoin(x=>x.C2,()=>c2Alias)//或使用Left.JoinAlias
.Where(()=>c1Alias.Id==3)
.和(()=>c2Alias.Id==2)
.List();
这会编译吗C1
是一个IList
并且不会有属性Id
,除非我遗漏了什么。您可以显示您试图生成的SQL吗?