使用ICriteria按null/not null排序

Kri*_*fer 5 nhibernate icriteria

我想像这样对结果进行排序:

  • 首先,我想要列/属性不为null的所有行/对象,然后是colmn/property 为null的所有行/对象.
  • 然后我想按另一列/属性排序.

我怎么能用ICriteria做到这一点?我是否必须创建自己的Order类,还是可以使用现有代码完成?

ICriteria criteria = Session.CreateCriteria<MyClass>()
  .AddOrder(Order.Desc("NullableProperty")) // What do I do here? IProjection? Custom Order class?
  .AddOrder(Order.Asc("OtherProperty"));
Run Code Online (Sandbox Code Playgroud)

我想要这样的订单:

NullableProperty  OtherProperty
----------------  -------------
1                 2
8                 7
5                 9
NULL              1
NULL              3
NULL              8
Run Code Online (Sandbox Code Playgroud)

Jon*_*gel 11

我终于得到了一个有效的答案.我之前认为不可能(10k可以看到我删除的答案),但我开始使用SQL查询:

SELECT Id, NullableProperty, OtherProperty
    FROM NullableSorting
    ORDER BY
        (CASE WHEN NullableProperty IS NULL THEN 1 ELSE 0 END),
        OtherProperty
Run Code Online (Sandbox Code Playgroud)

然后将其转换为使用条件接口.这里使用的所有对象都是内置的.

ICriteria criteria =
    session.CreateCriteria(typeof(NullableEntity))
    .AddOrder
    (
        Order.Asc
        (
            Projections.Conditional
            (
                Restrictions.IsNull("NullableProperty"),
                Projections.Constant(1),
                Projections.Constant(0)
            )
        )
    )
    .AddOrder(Order.Asc("OtherProperty"));
Run Code Online (Sandbox Code Playgroud)