Пять распространенных методов LINQ в картинках

Первоначально я опубликовал эту статью в своем блоге пару недель назад. Она является частью серии статей о LINQ.

Одной из лучших возможностей C# является LINQ. Я бы сказал, что это самая характерная из всех возможностей C#. Но если вы изучаете LINQ впервые, может оказаться сложным изучить все методы LINQ сразу. Вот пять наиболее распространенных методов LINQ в картинках.

Давайте поработаем со списком наших любимых фильмов. Давайте напишем класс Movie (или запись, если хотите) с названием, годом выпуска и рейтингом. И поместим наши любимые фильмы в список.

var movies = new List<Movie>
{
    new Movie("Titanic", 1998, 4.5f),
    new Movie("The Fifth Element", 1997, 4.6f),
    new Movie("Terminator 2", 1991, 4.7f),
    new Movie("Avatar", 2009, 5),
    new Movie("Platoon", 1986, 4),
    new Movie("My Neighbor Totoro", 1988, 5)
};
Вход в полноэкранный режим Выход из полноэкранного режима

1. Where

Метод Where возвращает новую коллекцию, содержащую только те элементы, которые удовлетворяют заданному условию.

Метод Where работает как фильтр для коллекций. Думайте о Where как о замене foreach с if в нем.

Давайте отфильтруем наш список фильмов, чтобы в нем остались только те, рейтинг которых больше или равен 4,5.

var favorites = movies.Where(movie => movie.Rating >= 4.5);
Вход в полноэкранный режим Выйти из полноэкранного режима

Этот запрос будет выглядеть примерно так,

Мы используем стрелки для отображения наших LINQ-запросов. Но вывод LINQ-запроса является лениво-оцениваемым. Это означает, что фактический результат LINQ-запроса оценивается до тех пор, пока мы не выполним цикл по его результату.

2. Select

Метод Select применяет функцию для преобразования каждого элемента коллекции.

Давайте найдем только названия наших любимых фильмов.

var favorites = movies.Where(movie => movie.Rating >= 4.5)
                      .Select(movie => movie.Name);
Войти в полноэкранный режим Выйти из полноэкранного режима

Этот запрос будет выглядеть следующим образом,

3. Any

Метод Any проверяет, есть ли в коллекции хотя бы один элемент, удовлетворяющий условию. В отличие от Where и Select, Any возвращает не новую коллекцию, а либо true, либо false.

Давайте посмотрим, смотрели ли мы фильмы с низким рейтингом.

var hasBadMovies = movies.Any(movie => movie.Rating < 2);
Войти в полноэкранный режим Выйти из полноэкранного режима

Этот запрос будет выглядеть следующим образом,

4. GroupBy

Метод GroupBy возвращает коллекцию «ведер», организованных по ключу. Кроме того, GroupBy преобразует каждое ведро элементов.

Давайте посчитаем фильмы с одинаковым рейтингом.

var groupedByRating = movies.GroupBy(movie => movie.Rating,
                                    (rating, movies) => new
                                    {
                                        Rating = rating,
                                        Count = movies.Count()
                                    });
Вход в полноэкранный режим Выход из полноэкранного режима

Второй параметр GroupBy — это Func с ключом группировки и элементами каждой группы в качестве параметров.

Этот запрос будет выглядеть следующим образом,

5. First & FirstOrDefault

Методы First и FirstOrDefault возвращают первый элемент в коллекции или первый элемент, удовлетворяющий условию. В противном случае First выбрасывает исключение, а FirstOrDefault возвращает значение по умолчанию для типа коллекции.

Давайте найдем самый старый фильм, который мы смотрели.

var oldest = movies.OrderBy(movie => movie.ReleaseYear)
                   .First();
Войти в полноэкранный режим Выйти из полноэкранного режима

Этот запрос будет выглядеть следующим образом,

Вуаля! Вот пять методов LINQ, которые я использую чаще всего: Where, Select, Any, Group и FirstOrDefault. Конечно, у LINQ есть и другие. Но с этими пятью методами вы будете прикрывать свою спину в 80% случаев.

Чтобы узнать о LINQ и других методах, ознакомьтесь с кратким руководством по LINQ в моем блоге. Все, что вам нужно знать, чтобы начать работать с LINQ, за 15 минут или меньше.

Привет! Я Сезар, инженер-программист и человек, который учится всю жизнь. Если вы хотите поддержать мою работу, посмотрите мой курс «Начало работы с LINQ» на сайте Educative, где я подробно рассказываю об этих и других методах LINQ.

Счастливого времени LINQ!

Оцените статью
Procodings.ru
Добавить комментарий