Первоначально я опубликовал эту статью в своем блоге пару недель назад. Она является частью серии статей о 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!