NHibernate QueryOver按第一个非空值排序(合并)

时间:2011-04-27 13:07:19

标签: nhibernate coalesce queryover

我想要提出的是这样的表达:

var result = Session.QueryOver<Foo>().OrderBy(f => f.UpdatedAt ?? f.CreatedAt);

果然,这不起作用。在T-SQL中粗略相当于

... order by coalesce(f.UpdatedAt, f.CreatedAt)

在NHibernate QueryOver中进行“合并”的犹太方法是什么?

2 个答案:

答案 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,但还没有回复。