Натуральная сортировка в NHibernate - PullRequest
1 голос
/ 05 августа 2010

У меня есть запрос гибернации, который возвращает список объектов, и я хочу упорядочить по заголовку.Это поле, поддерживаемое пользователем, и некоторые из наших клиентов предпочитают добавлять к заголовкам цифры, но я не могу это контролировать.Данные выглядят примерно так:

 - 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, но есть ли способ, с помощью которого я могу также отсортировать числа?

Кажется, есть несколько обходных путей, включающих префикс всех полей с ведущими нулями и т. д., но как-нибудь из них работает через NHibernate?

Это приложение работает взаимозаменяемо на Oracle и MsSQL.

Cheers,

Matt

Ответы [ 2 ]

0 голосов
/ 05 августа 2010

Вы можете рассмотреть возможность создания пользовательского порядка сортировки , который позволит вам указать параметры сортировки в столбце для достижения желаемых результатов.Что-то вроде:

ORDER BY Name COLLATE Latin1_General_BIN ASC

Но с соответствующим сопоставлением (я не верю, что Latin1_General_BIN - это то, что вам нужно конкретно)

0 голосов
/ 05 августа 2010

Добавить дополнительное поле (например, с именем Name_Number) для определения объекта и запроса на стороне сервера.

Для Oracle выберите в этом поле to_number(Name) as Name_Number.

Для Для MS SQL выберите в этом поле cast(Name as numeric) as Name_Number.

Затем сортируйте на стороне клиента как .AddOrder(Order.Asc("Name_Number"))

P.S. Я не уверен, потому что не имею достаточного опыта в hibernate / nhibernate и ненавижу ORM вообще :)

...