Ниже приведен простой пример программы для получения количества положительных элементов, содержащихся в последовательности.
using System.Linq;
class ImmediateExec { static void Main() {
int[] nums = { 1,
// Сформировать запрос на получение количества // положительных значений в массиве nums. int len = (from n in nums where n > 0 select n).Count();
Console.WriteLine("Количество положительных значений в массиве nums: " + len) ;
}
}
Эта программа дает следующий результат.
Количество положительных значений в массиве nums: 3
Обратите внимание на то, что циклforeachне указан в данной программе явным образом. Вместо этого запрос выполняется автоматически благодаря вызову метода расширенияCount ().
Любопытно, что запрос из приведенной выше программы можно было бы сформировать и следующим образом.
var posNums = from n in nums where n > 0 select n;
int len = posNums.Count(); // запрос выполняется здесь
В данном случае методCount() вызывается для переменной запроса. И в этот момент запрос выполняется для получения подсчитанного количества.
К числу других методов расширения, вызывающих немедленное выполнение запроса, относятся методыТо Array() иToList (). Оба этих метода расширения определены в классеEnumerable.МетодToAtray() возвращает результаты запроса в массиве, а методToList () — результаты запроса в форме коллекцииList.(Подробнее о коллекциях речь пойдет в главе 25.) В обоих случаях для получения результатов выполняется запрос. Например, в следующем фрагменте кода сначала получается массив результатов, сформированных по приведенному выше запросу в переменнойposNums,а затем эти результаты выводятся на экран.
int[] pnums = posNum.ToArray(); // запрос выполняется здесь
foreach(int i in pnums)
Console.Write(i + " ");
}
Деревья выражений
Еще одним средством, связанным с LINQ, является
нельзя выполнить, но можно преобразовать в исполняемую форму. Деревья выражений инкапсулируются в классеSystem. Linq. Expressions . Expression