2014-09-10 3 views
2

У меня есть список <>, который я ранее отсортировал по одному из полей на объекте. Если я выполняю список Where() в списке, могу ли я предположить, что результаты Where также будут отсортированы?Использование Где в списке, ранее отсортированном

// Sorted by salary, greatest to smallest. 
List<Players> players = _playerRepo.GetAll().OrderByDescending(x => x.Salary).ToList(); 

// Is this list safe to assume that the players with smith as last name are sorted by salary as well? 
List<Players> filteredPlayers = players.Where(x => x.LastName == "Smith").ToList(); 
+1

Да. Но вы, вероятно, должны иметь метод get by last name вместо того, чтобы вытаскивать все в память и затем фильтровать. – drneel

+2

Возможный дубликат [Сохраняющий заказ с LINQ] (http://stackoverflow.com/questions/204505/preserving-order-with-linq) –

+1

Вопрос в том, почему вы всегда создаете списки. Я бы сделал «ToList» только один раз в конце, чтобы обеспечить безопасную память и циклы процессора. –

ответ

2

Да, Where не изменит порядок заказанного ранее списка, он будет фильтровать его только.

Кроме того, порядок заказа стабильный, поэтому равные значения останутся в первоначальном порядке.

3

Да. Запросы LINQ, как правило, сохраняют порядок элементов.

Подсказка: не звоните ToList, если вы хотите отфильтровать результат дальше. Если это возможно, вы должны формировать запрос в базе данных, а не на клиенте.

+0

Если вы используете ToList(), он немедленно выполнит запрос. Если он не используется, он выполняется позже, в тот момент, когда вам нужна информация из запроса. (дополнительная информация о предыдущем комментарии) – Sliver2009

Смежные вопросы