今天碰到了这样的事情,并想知道在标准查询中是否有相同的解决方法。
基本上,有一个表,这个表有两个可以为空的字符串字段(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或事后排序是否是唯一的选择?
答案 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
使用那个“财产”。