Метод IQueryable.ToList работает с порядком сортировки T-SQL

Я использую EF Code First и у меня есть Linq To SQL (для базы данных Oracle). Ради простоты я возобновлю сценарий. Предположим, у меня есть такие продукты в таблице:

ProductName (varchar)
A
1
C  
2
B
3
4

Итак, я строю запрос, используя EF:

var query = Repo.Products.AsQueryable().OrderBy(p => p.ProductName);

Когда я отлаживаю, я получаю сгенерированный T-SQL и выполняю в oracle, все в порядке, набор результатов:

1
2
3
4
A
B
C

Это правильно (помните, что поле varchar/string), учитывая порядок приоритета символов.

Хорошо, теперь, если я сделаю следующее:

var list = query.ToList();

Результат:

A
B
C
1
2
3
4

Это неправильно и отличается от набора результатов Oracle. Если я вызываю ToList() перед OrderBy(), результат упорядочивается правильно, но я не хочу вызывать ToList(), чтобы избежать выборки всех записей перед фильтрацией.

Я действительно схожу с ума от этого. Кто-нибудь может помочь?

1 ответ

Решение

Я понял!

Проблема была в переменной NLS_SORT в Oracle. Странно было то, что PL / SQL Manager Developer показывает "правильный" порядок, вначале с числами, но причина такого поведения в том, что он изменяет сеанс переменной NLS_SORT, а Entity Framework - нет.

Я просто установил NLS_SORT в "BINARY" перед выполнением любого запроса, и все!

Решено!

Благодарю.

Другие вопросы по тегам