В прошлой статье мы узнали как с помощью делегата возможно выполнять сортировку обобщенной коллекции. В данном случае мы работали со списком List<T>.
Напомню, что мы имели дело с объектом класса Teacher Сортировка List.
Попробуем получить тот же результат сортировки по имени, но только сейчас не будем открыто использовать делегат, а воспользуемся выражением запроса Linq.
Я не оговорился, когда сказал, что не будем открыто применять делегат (для анонимного метода). Дело в том, что синтаксис Linq просто упрощает визуальное восприятие более простого кода, но в реале практически ничего не поменяется на более глубоком уровне исполняемого кода.
Итак, задача ясна – необходимо имеющийся список List, содержащий объекты пользовательского типа отсортировать по значению поля Teacher.Name.
Если запутались, то короче: сортировать надо по имени учителя.
Вот сам Linq-запрос:
List<Teacher> teachersSorted =
(from t in teachers orderby t.name select t)
.ToList<Teacher>();
Что же здесь понаписано?!
Все предельно просто. Сам Linq-запрос составляет запись:
from t in teachers orderby t.name select t
которая возвращает объект типа System.Linq.OrderedEnumerable<Teacher,string>
Но для получения списка List<Teacher> требуется конвертация типа, что мы и делаем с помощью обобщенного метода ToList<Teacher>().
Вообще, если Вы впервые столкнулись с Linq выражениями, то проще будет расписать вот так:
var varTeacher = from t in teachers orderby t.name select t;
List<Teacher> teachersSorted = varTeacher.ToList<Teacher>();
Ключевое слова var позволяет явно не типизировать ссылку на объект в управляемой куче.
Я ярый противник вообще использования "типа" var для ссылок поскольку во-первых нарушаются установленные хорошие принципы строгой типизации, а во-вторых
код становится менее читаемым. Вот получили мы объект и сослались на него ссылкой var varTeacher.
А теперь попробуйте сразу определить, что за тип. А фигушки. Приходится вникать в код и в голове просчитывать возможный тип ссылки.
А зачем это, если можно сразу же указать тип. Это и компилятору меньше работы для выполнения кода и нам проще ориентироваться в коде.
Но это лишь мое мнение, просто немного отвлекся от темы...
Уверен первое знакомство с технологией Linq Вам пришлось по-душе.
Сортировка List