在休眠排序中将空值保留在最后



我必须将空值始终保持在排序的最后,不考虑排序顺序(asc 或 desc)。

我使用了这样的代码。

criteria
   .AddOrder(Order.Desc(
          Projections.Cast(
                 NHibernateUtil.Decimal, 
                 Projections.Property("col1"))));
criteria
     .AddOrder(Order.Asc(
           Projections.Cast(
                 NHibernateUtil.Decimal, 
                 Projections.Property("col1"))));

我已阅读此链接:

http://www.techrepublic.com/blog/datacenter/control-null-data-in-oracle-using-the-order-by-clause/121

更新

在此链接中,您可以看到最后的空值进行排序。 如何在上面的代码中在 NHIBERNATE 中实现这一点?有什么帮助吗?

我们可以使用标准的 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"或..)以在末尾或开头移动它。因此,如果顺序是升序投影,如果降序低字符,将使用高字符。虽然有一些开销,但它可以完成这项工作

最新更新