如何按类型过滤嵌套在对象中的对象?

时间:2010-07-20 16:25:01

标签: c# nhibernate

        ICriteria iCriteria = DataAccessHelper.GetSession().CreateCriteria(typeof(T))
            .Add(Expression.Lt("Id", InitialIndex))
            .Add(Expression.Eq("Member", member))
            .Add(Expression.Eq("Action.class", typeof(U)))
            .SetMaxResults(MaxResult)
            .AddOrder(Order.Desc("Id"));

我基本上想创建一个可以通过他的工具类过滤Action对象的标准。但是当我运行时抛出以下异常。

{“无法解析属性:Action.class of:Classes.MemberAction”}

类MemberAction包含:

public class MemberAction {

   Int64 Id;
   Member member;
   Action action;
   IDictionary<string,string> Attributes;
   etc.....
}

并且Action类是其他4个类的基础

1 个答案:

答案 0 :(得分:0)

.Add(Expression.Lt("Id", InitialIndex))
.Add(Expression.Eq("Member", member))
.CreateAlias("Action", "Action") //here's the magic
.Add(Expression.Eq("Action.class", typeof(U)))
.SetMaxResults(MaxResult)
.AddOrder(Order.Desc("Id"))

Criteria查询处理隐式别名。他们不会自动取消引用关系。

添加的行在投影属性“Action”上创建一个名为“Action”的别名(第二个参数,可能是您想要命名的任何内容)。

现在,下一个语句引用“Action”别名引用的实体的class伪属性。