Книга: C# 4.0: полное руководство
Применение оператора let для создания временной переменной в запросе
Применение оператора let для создания временной переменной в запросе
Иногда возникает потребность временно сохранить некоторое значение в самом запросе. Допустим, что требуется создать переменную перечислимого типа, которую можно будет затем запросить, или же сохранить некоторое значение, чтобы в дальнейшем использовать его в операторе where
. Независимо от преследуемой цели, эти виды функций могут быть осуществлены с помощью оператора let
. Ниже приведена общая форма оператора let
:
let имя = выражение
где имя обозначает идентификатор, получающий значение, которое дает выражение. Тип имени выводится из типа выражения.
В приведенном ниже примере программы демонстрируется применение оператора let
для создания еще одного перечислимого источника данных. В качестве входных данных в запрос вводится массив символьных строк, которые затем преобразуются в массивы типа char
. Для этой цели служит еще один метод обработки строк, называемый ToCharArray()
и возвращающий массив, содержащий символы в строке. Полученный результат присваивается переменной chrArray
, которая затем используется во вложенном операторе from
для извлечения отдельных символов из массива. И наконец, полученные символы сортируются в запросе, и из них формируется результирующая последовательность.
// Использовать оператор let в месте с вложенным оператором from.
using System;
using System.Linq;
class LetDemo {
static void Main() {
string[] strs = { "alpha", "beta", "gamma" };
// Сформировать запрос на получение символов, возвращаемых из
// строк в отсортированной последовательности. Обратите внимание
// на применение вложенного оператора from,
var chrs = from str in strs
let chrArray = str.ToCharArray()
from ch in chrArray orderby ch
select ch;
Console.WriteLine("Отдельные символы, отсортированные по порядку:");
// Выполнить запрос и вывести его результаты,
foreach(char с in chrs) Console.Write(с + " ");
Console.WriteLine();
}
}
Вот к какому результату приводит выполнение этой программы.
Отдельные символы, отсортированные по порядку:
a a a a a b e g h l m m p t
Обратите внимание в данном примере программы на то, что в операторе let
переменной chrArray
присваивается ссылка на массив, возвращаемый методом str.ToCharArray()
.
let chrArray = str.ToCharArray()
После оператора let
переменная chrArray
может использоваться в остальных операторах, составляющих запрос. А поскольку все массивы в C# преобразуются в тип IEnumerable<T>
, то переменную chrArray
можно использовать в качестве источника данных для запроса во втором, вложенном операторе from
. Именно это и происходит в рассматриваемом здесь примере, где вложенный оператор from
служит для перечисления в массиве отдельных символов, которые затем сортируются по нарастающей и возвращаются в виде конечного результата.
Оператор let
может также использоваться для хранения неперечислимого значения. В качестве примера ниже приведен более эффективный вариант формирования запроса в программе IntoDemo
из предыдущего раздела.
var webAddrs = from addr in websites
let idx = addr.LastIndexOf('.') where idx != -1
group addr by addr.Substring(idx)
into ws where ws.Count() > 2
select ws;
В этом варианте индекс последнего вхождения символа точки в строку присваивается переменной idx
. Данное значение затем используется в методе Substring()
. Благодаря этому исключается необходимость дважды искать символ точки в строке.
- Основы LINQ
- Общая форма запроса
- Отбор запрашиваемых значений с помощью оператора where
- Сортировка результатов запроса с помощью оператора orderby
- Подробное рассмотрение оператора select
- Применение вложенных операторов from
- Группирование результатов с помощью оператора group
- Продолжение запроса с помощью оператора into
- Применение оператора let для создания временной переменной в запросе
- Объединение двух последовательностей с помощью оператора join
- Анонимные типы
- Создание группового объединения
- Методы запроса
- Режимы выполнения запросов: отложенный и немедленный
- Деревья выражений
- Методы расширения
- PLINQ
- Использование переменной окружения ISC_PATH
- SCTP SHUTDOWN COMPLETE chunk
- Letting DHCP requests through iptables
- 2. Пример создания базового отношения в записи на псевдокоде
- 5.5 Технологии создания моментальных снимков тома
- 4.2. Инструменты создания обзора
- 1.1.4. Турпродукт: виды, уровни, стадии создания
- Цикл создания программы
- 6.2. ПРИЕМЫ СОЗДАНИЯ ПРОДАЮЩИХ ТЕКСТОВ
- Применение функции scanf( )
- Применение PHP-технологий в программе HtmlPad
- 2.4. Три хитрости создания тарифов