Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在nhibernate排序中最后保留空值_Asp.net Mvc 3_Nhibernate - Fatal编程技术网

Asp.net mvc 3 在nhibernate排序中最后保留空值

Asp.net mvc 3 在nhibernate排序中最后保留空值,asp.net-mvc-3,nhibernate,Asp.net Mvc 3,Nhibernate,无论排序顺序(asc或desc)如何,我都必须在排序中始终保持空值 我用了类似这样的代码 criteria .AddOrder(Order.Desc( Projections.Cast( NHibernateUtil.Decimal, Projections.Property("col1")))); criteria .AddOrder(Order.Asc( Proj

无论排序顺序(asc或desc)如何,我都必须在排序中始终保持空值

我用了类似这样的代码

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

criteria
     .AddOrder(Order.Asc(
           Projections.Cast(
                 NHibernateUtil.Decimal, 
                 Projections.Property("col1"))));
我读过这个链接:

更新 在这个链接中,您可以看到排序的空值。在上面的代码中,如何在nhibernate中实现这一点?
有什么帮助吗?

我们可以使用标准的SQL函数
COALESCE
,并将其用作
orderby

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

实际上,通过这样做,我不必担心排序时出现空值。空值应始终位于最后。希望你能理解我的观点。如果我按照你的答案做,会发生这种情况吗?如果我理解正确,你必须(按照我的答案)做一些
if
陈述。如果Order by应该是
ASC
,那么为了降低null,我们必须将它们转换为一些高值(例如,char'Z'或十进制转换为'99999')。如果是
DESC
,则必须将其替换为一些较低的值。另一方面,这将适用于任何DB引擎。