我有一个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上互换运行。
干杯,
马特
答案 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
是您特别需要的)