NHibernate中的自然排序

时间:2010-08-05 08:59:55

标签: sql-server oracle nhibernate natural-sort

我有一个hibernate查询返回一个对象列表,我想按标题排序。这是一个用户维护的领域,我们的一些客户喜欢在标题前加上数字,这不是我能控制的。数据是这样的:

 - 1 first thing
 - 2 second thing
 - 5 fifth thing
 - 10 tenth thing
 - 20 twentieth thing
 - A thing with no number

传统

.AddOrder(Order.Asc("Name"))

导致文本排序:

 - 1 first thing
 - 10 tenth thing
 - 2 second thing
 - 20 twentieth thing
 - 5 fifth thing
 - A thing with no number

这是正确的,因为这是一个nvarchar字段,但有什么方法可以让数字排序吗?

似乎有几种解决方法涉及为所有字段添加前导0等等,但通过NHibernate执行这些工作?

此应用程序可在Oracle和MsSQL上互换运行。

干杯,

马特

2 个答案:

答案 0 :(得分:0)

在对象防御和服务器端查询中添加其他字段(例如,名为Name_Number)。

对于Oracle,请在此字段中选择to_number(Name) as Name_Number

对于For MS SQL,请在此字段中选择cast(Name as numeric) as Name_Number

然后在客户端排序为.AddOrder(Order.Asc("Name_Number"))

P.S。我不确定,因为没有足够的hibernate / nhibernate经验而且讨厌ORM :)

答案 1 :(得分:0)

您可以考虑创建一个custom sort order实现,该实现允许您指定列上的排序规则以实现所需的结果。有点像:

ORDER BY Name COLLATE Latin1_General_BIN ASC

但是通过适当的整理(我不相信Latin1_General_BIN是您特别需要的)