В приведенном ниже примере программы демонстрируется применение оператора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;
}
}
Вот к какому результату приводит выполнение этой программы.
Отдельные символы, отсортированные по порядку: aaaaabeghlmmpt
Обратите внимание в данном примере программы на то, что в оператореletпеременнойchrArrayприсваивается ссылка на массив, возвращаемый методомstr.
ToCharArray.
let chrArray = str.ToCharArray
После оператораletпеременнаяchrArrayможет использоваться в остальных операторах, составляющих запрос. А поскольку все массивы в C# преобразуются в типIEnumerable
Операторletможет также использоваться для хранения неперечислимого значения. В качестве примера ниже приведен более эффективный вариант формирования запроса в программеIntoDemoиз предыдущего раздела.
var webAddrs = from addr in websites
let idx = addr.LastlndexOf('.') where idx != -1
group addr by addr.Substring(idx) into ws where ws.Count > 2 select ws;