Что такое IQueryable и когда выполняется запрос?

В LINQ to Objects запрос выполняется сразу при вызове метода, который приводит к материализации данных (например, ToList(), ToArray(), Count(), ForEach(), First(), Single()).

Короткий ответ

Что ответить на собеседовании

В LINQ to Objects запрос выполняется сразу при вызове метода, который приводит к материализации данных (например, ToList(), ToArray(), Count(), ForEach(), First(), Single()). В LINQ to Entities (и других LINQ провайдерах для баз данных) запрос отправляется к базе данных в момент, когда происходит итерация по результату или вызов одного из таких материализующих методов. До этого момента LINQ-выражение представляет собой лишь построение дерева выражений.

Подробный разбор

Ответ с пояснениями

В LINQ to Objects запрос выполняется сразу при вызове метода, который приводит к материализации данных (например, ToList(), ToArray(), Count(), ForEach(), First(), Single()). В LINQ to Entities (и других LINQ провайдерах для баз данных) запрос отправляется к базе данных в момент, когда происходит итерация по результату или вызов одного из таких материализующих методов. До этого момента LINQ-выражение представляет собой лишь построение дерева выражений.

// LINQ to Objects
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// Запрос выполняется сразу
List<int> evenNumbers = numbers.Where(n => n % 2 == 0).ToList();

// LINQ to Entities (пример)
//dbContext.Products.Where(p => p.Price > 100); // Запрос еще не отправлен, построено дерево выражений
//List<Product> expensiveProducts = dbContext.Products.Where(p => p.Price > 100).ToList(); // Запрос отправляется сейчас (при вызове ToList())

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку