我必须在排序时始终保持空值,不管排序顺序(asc或desc)。
我使用的代码是这样的。
criteria
.AddOrder(Order.Desc(
Projections.Cast(
NHibernateUtil.Decimal,
Projections.Property("col1"))));
criteria
.AddOrder(Order.Asc(
Projections.Cast(
NHibernateUtil.Decimal,
Projections.Property("col1"))));
我已阅读此链接:
在此链接中,您可以看到 nulls last 进行排序。我如何在上面的代码中实现这个nhibernate? 有什么帮助吗?
答案 0 :(得分:1)
我们可以使用标准SQL函数COALESCE
并将其用作ORDER BY
using NHibernate.Dialect.Function;
using NHibernate.Criterion;
...
// sql function definition
var sqlFunction = new SQLFunctionTemplate(NHibernateUtil.String
, "COALESCE(Col1, 'zzzz')");
// create projection
var projection = Projections.SqlFunction(sqlFunction, NHibernateUtil.String);
// order by projection
criteria.AddOrder(new Order(projection, false));
这取决于您的需求NULL
将如何替换('zzzzz'或'000'或..)以在结尾或开头移动它。因此,如果订单是升序投影将使用高字符,如果下降低字符。虽然有一些开销,但它会完成这项工作