Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
548 of 1492 menu
◀ ▶

Отложенное выполнение

Операторы LINQ to Objects вроде Where и Select из класса Enumerable не обходят источник сразу: цепочка хранится как отложенный запрос. Обход начинается при материализации, например при ToList, Count или First.

Синтаксис

IEnumerable<T> query = source.Where(x => x > 2); // обход ещё не начался List<T> res = query.ToList();

Пример

Давайте построим запрос и материализуем его через ToList:

using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<int> nums = new List<int> {1, 2, 3, 4, 5}; var query = nums.Where(n => n > 2); List<int> res = query.ToList(); Console.WriteLine(string.Join(" ", res)); } }

Результат выполнения кода:

"3 4 5"

Пример

Давайте убедимся, что Count тоже запускает обход:

using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<int> nums = new List<int> {1, 2, 3, 4, 5}; var query = nums.Where(n => n % 2 == 0); Console.WriteLine(query.Count()); } }

Результат выполнения кода:

2

Смотрите также

  • метод Where,
    который откладывает фильтрацию
  • метод ToList,
    который материализует запрос
  • метод Select,
    который откладывает проекцию
  • класс Enumerable,
    где объявлены операторы LINQ to Objects
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить