Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
1 < 10
2 < 10
3 < 10
8 < 10
4 < 10
1 < 10
2 < 10
3 < 10
8 < 10
Среда Visual Studio обладает одной полезной особенностью: если вы поместите точку останова перед оценкой запроса LINQ, то получите возможность просматривать содержимое во время сеанса отладки. Просто наведите курсор мыши на переменную результирующего набора LINQ (
subset

Роль немедленного выполнения
Когда требуется оценить выражение LINQ, выдающее последовательность, за пределами логики
foreach
Enumerable
ТоArray<Т>()
ToDictionary<TSource, ТКеу>()
ToList<T>()
Кроме того, запрос выполняется немедленно в случае поиска только одного элемента. Метод
First()
orderby
FirstOrDefault()
where
Single()
orderby
orderby
SingleOrDefault()
where
First(OrDefault)
Single(OrDefault)
Single(OrDefault)
static void ImmediateExecution()
{
Console.WriteLine();
Console.WriteLine("Immediate Execution");
int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8 };
// Получить первый элемент в порядке последовательности
int number = (from i in numbers select i).First();
Console.WriteLine("First is {0}", number);
// Получить первый элемент в порядке запроса
number = (from i in numbers orderby i select i).First();
Console.WriteLine("First is {0}", number);
// Получить один элемент, который соответствует запросу
number = (from i in numbers where i > 30 select i).Single();
Console.WriteLine("Single is {0}", number);
try
{
// В случае возвращения более одного элемента генерируется исключение
number = (from i in numbers where i > 10 select i).Single();
}
catch (Exception ex)
{
Console.WriteLine("An exception occurred: {0}", ex.Message);
}
<b> // Получить данные НЕМЕДЛЕННО как int[].</b>
int[] subsetAsIntArray =
(from i in numbers where i < 10 select i).ToArray<int>();
<b> // Получить данные НЕМЕДЛЕННО как List<int>.</b>
List<int> subsetAsListOfInts =
(from i in numbers where i < 10 select i).ToList<int>();
}
Обратите внимание, что для вызова методов
Enumerable
Вспомните из главы 10, что если компилятор C# в состоянии однозначно определить параметр типа обобщенного элемента, то вы не обязаны указывать этот параметр типа. Следовательно,
ТоArray<Т>()
ToList<T>()
int[] subsetAsIntArray =
(from i in numbers where i < 10 select i).ToArray();
Полезность немедленного выполнения очевидна, когда нужно возвратить результаты запроса LINQ внешнему вызывающему коду, что и будет темой следующего раздела главы.
Возвращение результатов запроса LINQ
Внутри класса (или структуры) можно определить поле, значением которого будет результат запроса LINQ. Однако для этого нельзя использовать неявную типизацию (т.к. ключевое слово
var