OrderBy и Distinct

Для сортировки последовательности в LINQ имеется четыре метода:

IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> items, Func<T, K> keySelector)
IOrderedEnumerable<T> OrderByDescending<T>(this IEnumerable<T> items, Func<T, K> keySelector)
IOrderedEnumerable<T> ThenBy<T>(this IOrderedEnumerable<T> items, Func<T, K> keySelector)
IOrderedEnumerable<T> ThenByDescending<T>(this IOrderedEnumerable<T> items, Func<T, K> keySelector)

Первые два дают на выходе последовательность, упорядоченную по возрастанию/убыванию ключей. А keySelector — это как раз функция, которая каждому элементу последовательности ставит в соответствие некоторый ключ, по которому его будут сравнивать при сортировке.

Если при равенстве ключей вы хотите отсортировать элементы по другому критерию, на помощь приходит метод ThenBy.

Например, в следующем примере все имена сортируются по убыванию длин, а при равных длинах — лексикографически.

Чтобы убрать из последовательности все повторяющиеся элементы, можно воспользоваться функцией Distinct.

Комментарии отключены
Работает форматирование: **жирный текст**, __курсивный текст__, `код`, ```многострочный код```.