Метод 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" перед выполнением любого запроса, и все!
Решено!
Благодарю.