NHibernate子类属性查询

NHibernate子类属性查询,nhibernate,hibernate,Nhibernate,Hibernate,我有一个类a,它包含一个类B,它包含一个属性为p的类C。所以像这样的东西应该有用,不是吗 var query = Session.CreateCriteria(typeof(A)); query.Add(Expression.InsensitiveLike( Projections.Cast(NHibernateUtil.String, Projections.Property("B.C.P")),

我有一个类
a
,它包含一个类
B
,它包含一个属性为
p
的类
C
。所以像这样的东西应该有用,不是吗

var query = Session.CreateCriteria(typeof(A));
query.Add(Expression.InsensitiveLike(
              Projections.Cast(NHibernateUtil.String,
                               Projections.Property("B.C.P")),
              "%bla%", MatchMode.Exact));
我得到一个
无法解析属性的
异常

我知道我可以使用
CreateAlias
等,我也尝试过,但没有任何效果。此时,我选择了“隐式关联联接”

如有任何反馈,将不胜感激。非常感谢

Chris

CreateAlias(或CreateCriteria)是唯一的方法

var query = Session.CreateCriteria<A>()
                   .CreateAlias("B", "B")
                   .CreateAlias("B.C", "C");
query.Add(Expression.InsensitiveLike(
              Projections.Cast(NHibernateUtil.String,
                               Projections.Property("C.P")),
              "%bla%", MatchMode.Exact));
var query=Session.CreateCriteria()
.CreateAlias(“B”、“B”)
.CreateAlias(“B.C”、“C”);
query.Add(Expression.InsensitiveLike(
投影.Cast(NHibernateUtil.String,
不动产(“C.P”),
“%bla%”,MatchMode.Exact);

谢谢,我会看看这个。刚刚意识到“隐式关联加入”仅适用于HQL。我想这是我的问题…真的。但是,您也应该考虑使用HQL,除非您的查询是高度动态的(即,基于独立的过滤器,可以使用或不使用,改变排序顺序等),我的查询是非常动态的。这就是为什么我需要这个。谢谢顺便说一句,我所知道的所有NHibernate书籍(包括在线文档)只提供了非常简单的查询示例。对于这样的高级查询,有好的源代码/书籍吗?谢谢