我想要提出的是这样的表达:
var result = Session.QueryOver<Foo>().OrderBy(f => f.UpdatedAt ?? f.CreatedAt);
果然,这不起作用。在T-SQL中粗略相当于
... order by coalesce(f.UpdatedAt, f.CreatedAt)
在NHibernate QueryOver中进行“合并”的犹太方法是什么?
答案 0 :(得分:9)
.OrderBy(Projections.SqlFunction("coalesce",
NHibernateUtil.DateTime,
Projections.Property<Foo>(x => x.UpdatedAt),
Projections.Property<Foo>(x => x.CreatedAt)))
答案 1 :(得分:1)
迭戈的回答是我提出的方式,但对我来说似乎过于冗长,所以我问a question,得到了an excellent answer。基本上,您可以注册自己的扩展,然后只需
.OrderBy(f => f.UpdatedAt.IfNull(f.CreatedAt));
其中IfNull
是您的新扩展程序。我甚至向NH Jira提交了an improvement proposal,但还没有回复。