Фильтрация и преобразование

В основе LINQ лежит интерфейс последовательности IEnumerable<T>. Последовательность — это абстракция чего-то, что можно начать перечислять и переходить от текущего элемента к следующему пока последовательность не закончится (или пока не надоест).

Массивы, List, Dictionary, HashSet — все эти коллекции реализуют интерфейс последовательности.

Для IEnumerable<T> в пространстве имен System.Linq определено множество полезных методов расширения, которые и образуют основу LINQ.

Чтобы понимать дальнейший материал, вы должны быть знакомы с концепцией методов расширения и синтаксисом лямбда-выражений.

Методы фильтрации и преобразования

Where используется для фильтрации перечисляемого. Он принимает в качестве параметра функцию-предикат и возвращает новое перечисляемое, состоящее только из тех элементов исходного перечисляемого, на которых предикат вернул true.

Вот его полная сигнатура:

IEnumerable<T> Where(this IEnumerable<T> items, Func<T, bool> predicate)

Select используется для поэлементного преобразования перечисляемого. Он принимает в качестве параметра преобразующую функцию и возвращает новое перечисляемое, полученное применением этой функции к каждому элементу исходного перечисляемого.

IEnumerable<R> Select(this IEnumerable<T> items, Func<T, R> map)

Самое время еще раз взглянуть на пример с первого слайда — его логика должна проясниться:

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