Я пытаюсь получить отсортированный список с использованием LINQ и Entity Framework, и я получаю некоторые действительно странные результаты. Мой код выглядит примерно так:Weird LINQ OrderBy Behavior
// My class that corresponds to a database table
class MyClass
{
public string FirstField { get; set; }
public string SecondField { get; set; }
public string ThirdField { get; set; }
}
// My Entity Framework code
List<MyClass> firstList = (from p in context.myObjects select p).OrderBy(p => p.FirstField).ToList();
List<MyClass> secondList = firstList.OrderBy(p => p.FirstField).ToList();
Когда я смотрю на мои результаты, secondList сортируется правильно, но firstList отсортирован неправильно. По большей части он отсортирован правильно, но некоторые элементы не в порядке. Например, firstList будет выглядеть примерно так:
AAA
BBB
CCC
DDD
NNN <--- wrong order
EEE
FFF
GGG
PPP <--- wrong order
HHH
III
Однако secondList сортируется полностью правильно.
Я изучил запрос, который создает LINQ, и запрос имеет правильный ORDER BY. Я выполнил этот же запрос в SQL Management Studio, и результаты упорядочены правильно (в том же порядке, что и второйList, но не firstList). Я пробовал делать это с помощью orderby в моем запросе LINQ, а не с помощью OrderBy(), и результаты неверны одинаково.
Я не понимаю, что здесь происходит. Не следует ли сортировать firstList и не должен быть firstList и secondList одинаковыми?
Я использую Fluent API для сопоставления своих объектов с таблицами и свойствами с полями, если это имеет значение.
Я не вижу ничего плохого в том, что у вас есть. firstList должен быть отсортирован и должен быть таким же, как у secondList. Единственное отличие состоит в том, что первая будет сортироваться по db, а вторая будет сортироваться по .NET. Является ли ваш пример данными на самом деле, что сортируется, или это что-то еще, когда коалиция в базе данных не то, что вы ожидаете? (Сортировка u и u с умлаутами одинаковые и т. Д.)? –
Это не мой точный производственный код, но сортировка не должна быть проблемой при сортировке. Реальные данные имеют 1000 значений, из которых 50 значений. Что происходит, так это то, что порядок сортировки похож на A, A, A, A, B, B, B, B, A, B, B, B, C, C, A, C, C, D .... –
Это трудно воспроизвести, поэтому попробуйте разные варианты. Вы все еще видите несортированный список, если вы создаете первый список, например, 'firstList = context.myObjects.OrderBy (p => p.FirstField).ToList(); '? – ziddarth