![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Применение оператора 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(). Благодаря этому исключается необходимость дважды искать символ точки в строке.
|