В приведенном ниже примере программы демонстрируется применение операто ра 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
Оператор 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. Благодаря этому исключается необходимость дважды искать символ точки в строке. Объединение двух последовательностей с помощью оператора join
Когда приходится иметь дело с базами данных, то зачастую требуется формиро вать последовательность, увязывающую данные из разных источников. Например, в Интернет-магазине может быть организована одна база данных, связывающая наи менование товара с его порядковым номером, и другая база данных, связывающая по рядковый номер товара с состоянием его запасов на складе. В подобной ситуации мо жет возникнуть потребность составить список, в котором состояние запасов товаров на складе отображается по их наименованию, а не порядковому номеру. Для этой цели придется каким-то образом "увязать" данные из двух разных источников (баз данных). И это нетрудно сделать с помощью такого средства LINQ, как оператор join.
Ниже приведена общая форма оператора join (совместно с оператором from). from переменная_диапазона_А in источник_данных_А join переменная_диапазона_В in источник_данных_В
on переменная