nhibernate - 使用字符串的 QueryOver OrderBy 子属性

标签 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

有什么想法吗?

最佳答案

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

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,但它仍然有效:-)

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

关于nhibernate - 使用字符串的 QueryOver OrderBy 子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28948397/

相关文章:

nhibernate - Get<T> 和 Load<T> 的区别

nhibernate - 如何使用 NHibernate QueryOver api 获取行数?

NHibernate 3.0 QueryOver 相当于 Nhibernate Linq 中的 FetchMany

c# - NHibernate QueryOver 其中值在列表属性/字段中?

nhibernate - 使用 JoinQueryOver : Get greatgrandchildren, 获取知道父亲

linq - 将 Linq 表达式组合到 Func 时遇到问题

wcf - NHibernate和WCF : Performance (session reuse) vs.并发(同时请求)

nhibernate - 如何使用 NHibernate 3.2 ConventionModelMapper 映射 Table-Per-Hierarchy

c# - 如果两个或更多人同时更新一条记录会怎样?