我必须将空值始终保持在排序的最后,不考虑排序顺序(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"或..)以在末尾或开头移动它。因此,如果顺序是升序投影,如果降序低字符,将使用高字符。虽然有一些开销,但它可以完成这项工作