Linq Orderby vs SQL Orderby

57
7

У меня есть столбец таблицы (Varchar) со следующими данными:

COLUMN_NAME

102100 1-2000 112100

Когда я использую OrderBy в инструкции SQL, я получаю элементы в следующем порядке:

COLUMN_NAME

1-2000 102100 112100

Если я запрашиваю данные (данные поступают из WCF) и использует LINQ OrderBy, я получаю Элементы в следующем порядке:

Имя свойства

102100 112100 1-2000

Кажется, что данные "1-2000" упорядочены по-разному в SQL и LINQ.

Я попытался использовать StringComparison.Ordinal и StringComparison.InvariantCulture, но он все еще не работает.

Пожалуйста, помогите!

спросил(а) 2017-02-22T17:57:00+03:00 2 года, 9 месяцев назад
2
Решение
47

Вы можете использовать метод сортировки linq с порядковым номером StringComparer

list.Sort(StringComparer.Ordinal);

Это дает мне ожидаемый результат.

ответил(а) 2017-02-22T18:13:00+03:00 2 года, 9 месяцев назад
Еще 1 ответ
78

Поскольку ваш вопрос помечен как "Oracle", я предполагаю, что вы отправляете операторы SQL в базу данных Oracle.

Сортировка, используемая базой данных Oracle, определяется в настройках "NLS". Значение по умолчанию этого параметра зависит от того, как Oracle был установлен, и операционной системы на главном сервере.

Дополнительная информация здесь: https://docs.oracle.com/cd/B28359_01/server.111/b28298/ch5lingsort.htm

И очень подробный документ из Oracle: http://www.oracle.com/technetwork/database/database-technologies/globalization/twp-appdev-linguistic-sorting-10gr2-132064.pdf

Экстракт:

"Испания традиционно относится к ch, ll, а также - как собственные буквы, упорядоченные после c, l и n соответственно. Например, следующие испанские слова будут отсортированы как перечисленные:

cabalmente, CABA Л.Л. а, кантин, ч N A, clamar, curador, гл Acara

Недавно эта традиционная испанская практика сортировки была заменена современным испанским сословием, которое устраняет особый статус ch и ll ".

ответил(а) 2017-02-22T18:09:00+03:00 2 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема