Я использую EF Code First, и у меня есть Linq To SQL (против базы данных Oracle). Ради простоты я буду возобновлять сценарий. Предположим, у меня есть таблица продуктов, как это:Метод IQueryable.ToList, испорченный с порядком сортировки T-SQL
ProductName (varchar)
A
1
C
2
B
3
4
Ну, так что я построить запрос с использованием EF:
var query = Repo.Products.AsQueryable().OrderBy(p => p.ProductName);
Когда я отладки, я получаю сгенерированный T-SQL и выполнить в оракула, Everthing является оК, набор результатов:
1
2
3
4
A
B
C
Это правильно (помните, поле VARCHAR/строка), учитывая порядок старшинства символов.
Хорошо, теперь, если я делаю следующее:
var list = query.ToList();
Результат является:
A
B
C
1
2
3
4
Это неправильно, и отличается от Oracle результирующего набора. Если я вызываю ToList() до OrderBy(), результат упорядочен правильно, но я не хочу вызывать ToList() раньше, чтобы избежать выборки всех записей перед фильтрацией.
Я действительно с ума схожу с этим. Кто-нибудь может помочь?
Нет ли здесь ничего другого? Я не могу воспроизвести это на моем конце. – IronMan84
Ничего другого, каждый запрос linq к базе данных oracle размещает буквы перед числами с помощью orderby, даже если T-SQL сгенерирован правильно и проверен, упорядочивая отлично. Уже злитесь. –
Кажется, проблема прямо внутри ToList, при получении результатов и преобразовании их в Список объектов. Есть ли способ отладки метода ToList? –