Nhibernate 或者使用ICriteria组合两种情况

Nhibernate 或者使用ICriteria组合两种情况,nhibernate,icriteria,Nhibernate,Icriteria,我想执行一个简单的选择,条件分布在3个表中 Select a.* FROM TBL_A a JOIN TBL_B b ON a.bId=b.Id JOIN TBL_C c ON a.cId=c.Id JOIN TBL_D d ON c.dId=d.Id WHERE (b.value='X' OR c.value='x') AND d.someFlag=1 假设这些表映射正确,如何使用icriteraapi实现这样的查询 到目前为止,我所拥有的并没有实现所有这些…

我想执行一个简单的选择,条件分布在3个表中

Select a.*
   FROM TBL_A a
   JOIN TBL_B b ON a.bId=b.Id
   JOIN TBL_C c ON a.cId=c.Id 
   JOIN TBL_D d ON c.dId=d.Id
WHERE (b.value='X' OR c.value='x')
   AND d.someFlag=1
假设这些表映射正确,如何使用icriteraapi实现这样的查询


到目前为止,我所拥有的并没有实现所有这些…

ICriteria查询可能如下所示:

  • -如何使用,我们可以查看以下文档:
  • -如何连接别名
查询代码段:

 IList<A> list = sess.CreateCriteria(typeof(A), "a")
    .CreateAlias("B", "b")                  // B is property of A a.B
    .CreateCriteria("C", "c")               // C is property of A a.C
    .CreateAlias("D", "d")                  // D is property of C c.D

    .Add( Expression.Disjunction()          // OR statement
       .Add( Expression.Eq("b.value", "X" ) ) // a property "value" from "b" 
       .Add( Expression.Eq("c.value", "x" ) ) // a property "value" from "c"
    )
    .Add( Expression.Eq("d.someFlag", 1) )  // AND this expression

                                            // we are still selecting just a.*
    .SetResultTransformer(Transformers.AliasToBean<A>())
    .List<A>()
IList list=sess.CreateCriteria(typeof(A),“A”)
.CreateAlias(“B”,“B”)//B是A.B的属性
.CreateCriteria(“C”,“C”)//C是A.C的属性
.CreateAlias(“D”,“D”)//D是C.D的属性
.Add(Expression.Disjunction()//或语句
.Add(Expression.Eq(“b.value”,“X”)///a属性“value”来自“b”
.Add(Expression.Eq(“c.value”,“x”)//来自“c”的属性“value”
)
.Add(Expression.Eq(“d.someFlag”,1))//和这个表达式
//我们仍然只选择了一个*
.SetResultTransformer(Transformers.AliasToBean())
.List()