QueryOver OrderBy使用字符串的子属性

时间:2015-03-09 17:41:02

标签: nhibernate queryover

我正在努力使用QueryOver.OrderBy和子实体上属性名称的字符串。例如以下工作,但我正在硬编码OrderBy字段。

Customer custAlias = null;
session.QueryOver<Campaign>()
       .JoinAlias(x => x.Customer, () => custAlias)
       .OrderBy(() => custAlias.Name).Desc()   // want to use string property name
       .List();

我可以使用类似的字符串指定OrderBy:

       .OrderBy(Projections.Property("DOB")).Desc();

但这是在Campaign实体上寻找“DOB”,而不是子Customer实体。是否可以检索NH使用的别名,然后设置属性的路径,例如

       .OrderBy(Projections.Property("cust.DOB")).Desc(); // where "cust" is the alias

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用的别名是变量的名称。所以

Projections.Property("custAlias.DOB")

(现在不能测试,但如果我记得它有效的话)

有趣的是,它本身并不是用作别名的变量,而是它的名称。这意味着什么?

QueryOver<Campaign> query;

{
    Customer custAlias = null;
    query = session.QueryOver<Campaign>()
         .JoinAlias(x => x.Customer, () => custAlias)
}

{
    Customer custAlias = null;
    var result = query.OrderBy(() => custAlias.Name).Desc()   // want to use string property name
       .List()

}

两个不同的custAlias,但它仍然有效: - )

(如果你想在多个方法中拆分查询片段,这很有用......唯一重要的是他们对别名使用相同的命名)

相关问题