Для сортировки последовательности в LINQ имеется четыре метода:
1 | IOrderedEnumerable<T> OrderBy<T>(this IEnumerable<T> items, Func<T, K> keySelector); |
Первые два дают на выходе последовательность, упорядоченную по возрастанию/убыванию ключей. А keySelector — это как раз функция, которая каждому элементу последовательности ставит в соответствие некоторый ключ, по которому его будут сравнивать при сортировке.
1 | var names = new[] { "Pavel", "Alexander", "Anna" }; |
Если при равенстве ключей вы хотите отсортировать элементы по другому критерию, то на помощь приходит метод ThenBy.
Например, в следующем примере все имена сортируются по убыванию длин, а при равных длинах — лексикографически.
1 | var names = new[] { "Pavel", "Alexander", "Irina" }; |
Чтобы убрать из последовательности все повторяющиеся элементы используют LINQ функцию Distinct:
1 | var numbers = new[] { 1, 2, 3, 3, 1, 1, }; |