лямбда-выражения в заполненных списках - PullRequest
1 голос
/ 02 февраля 2010

На сайте есть несколько постов о том, как сделать заказ с помощью лямбда-выражений, но я не могу заставить мой работать.Я пытаюсь изменить порядок списка, который уже заполнен.Я ошибаюсь, думая, что я могу изменить порядок в этом списке, используя выражения лямбады?

QuarterMileTimes.OrderByDescending(c => c.PquartermileTime); 

Мне было интересно, если до PquartermileTime есть строка?Я также попробовал это выражение в дату

QuarterMileTimes.orderBy(c => c.RaceDay);

Все еще не повезло, где я ошибаюсь?

Ответы [ 5 ]

5 голосов
/ 02 февраля 2010

Когда вы вызываете OrderByDescending , метод возвращает new IEnumerable<T> - он не меняет порядок коллекции на месте.

Попробуйте сделать:

QuarterMileTimes = QuarterMileTimes.OrderByDescending(c => c.PquartermileTime).ToList();

(Это если ваша коллекция List<T> ...)

1 голос
/ 02 февраля 2010

OrderByDescending возвращает IOrderedEnumerable<T>, то есть новую последовательность с элементами в указанном порядке. Вам придется переназначить QuarterMileTimes, чтобы получить ожидаемое поведение:

QuarterMileTimes = QuarterMileTimes.OrderByDescending(c => c.PquarterMileTime).ToList();

В качестве альтернативы вы можете просто использовать возвращаемую последовательность отдельно, что является обычным подходом.

1 голос
/ 02 февраля 2010

Вы присваиваете его новой переменной, не так ли?

var sortedTimes = QuarterMileTimes.OrderByDescending(c => c.PquartermileTime);

Это не похоже, например, метод List.Sort, который сортирует существующий список.
Результат метода должен быть присвоен переменной.

1 голос
/ 02 февраля 2010

Результатом OrderByDescending (и всех других методов расширения Enumerable) является IEnumerable<T>, который проецирует исходные данные в порядке, который вы описываете. не никак не изменяет исходные данные.

Если хотите, вы можете использовать метод расширения ToList(), чтобы создать новый List<T> из этого результата и присвоить его исходной переменной.

QuarterMileTimes = QuarterMileTimes.OrderByDescending(/*...*/).ToList();

(Это, конечно, при условии, что QuarterMileTimes является List<T>)

Суть ответа: нет , OrderByDescending никак не влияет на источник данных.

0 голосов
/ 02 февраля 2010

QuarterMileTimes.OrderByDescending(c => c.PquartermileTime) возвращает новое перечисляемое значение, упорядоченное по PquartermileTime. Он не переупорядочивает QuarterMileTimes на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...