使用NHibernate Criteria Queries进行复杂排序

时间:2010-02-22 23:43:08

标签: c# nhibernate

今天碰到了这样的事情,并想知道在标准查询中是否有相同的解决方法。

基本上,有一个表,这个表有两个可以为空的字符串字段(foo和bar)。我们希望按这些的总和进行排序。

字符串连接(order by foo + bar desc)如果其中一个值为null,则返回null,order by foo, bar不会按照我们的意愿考虑空值。

sql中的解决方案可能如下所示:

SELECT foo, bar, (ISNULL(foo,'') + ISNULL(bar,'')) as f
FROM foobar
ORDER BY f DESC

我不确定nhibernate的tokenizer中的细节,但是如果你把它写成

SELECT foo, bar
FROM foobar
ORDER BY (ISNULL(foo,'') + ISNULL(bar,'')) DESC

使用相同的查询方法,因为它将foo和bar解析为单独的排序表达式。

那么......你会如何在标准查询中写出来?是否有这样的方法,或者新的ResultTransformer或事后排序是否是唯一的选择?

1 个答案:

答案 0 :(得分:3)

您应该使用相应的公式创建仅查询属性(access="noop",请参阅http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx)。

例如,

<property name="SortableFoo" formula="ISNULL(foo,'')"/>

现在你可以AddOrder使用那个“财产”。