Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Применение оператора 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(). Благодаря этому исключается необходимость дважды искать символ точки в строке.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.005 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал