Формально методSelect в рассматриваемом здесь примере не нужен, поскольку это простой запрос. Ведь последовательность, возвращаемая методомWhere , уже содержит конечный результат. Но окончательный выбор можно сделать и по более сложному критерию, как это было показано ранее на примерах использования синтаксиса запросов. Так, по приведенному ниже запросу из массиваnumsвозвращаются положительные значения, увеличенные на порядок величины.
var posNums = nums.Where(n => n > 0) .Select (r => r * 10);
Как и следовало ожидать, в цепочку можно объединять и другие операции над данными, получаемыми по запросу. Например, по следующему запросу выбираются положительные значения, которые затем сортируются по убывающей и возвращаются в виде результирующей последовательности:
var posNums = nums.Where(n => n > 0).OrderByDescending(j => j);
где выражениеj=>jобозначает, что упорядочение зависит от входного параметра, который является элементом данных из последовательности, получаемой из методаWhere.
В приведенном ниже примере демонстрируется применение метода запросаGroupBy . Это измененный вариант представленного ранее примера.
// Продемонстрировать применение метода запроса GroupBy.
// Это переработанный вариант примера, представленного ранее // для демонстрации синтаксиса запросов.
using System; using System.Linq;
class GroupByDemo { static void Main {
string[] websites = {
"hsNameA.com", "hsNameB.net", "hsNameC.net",
’"hsNameD.com", "hsNameE.org", "hsNameF.org",
"hsNameG.tv", "hsNameH.net", "hsNamel.tv"
};
// Использовать методы запроса для группирования
// веб-сайтов по имени домена самого верхнего уровня.
var webAddrs = websites.Where(w => w.LastlndexOf) != 1).
GroupBy(x => x.Substring(x.LastlndexOf(".", x.Length)));
// Выполнить запрос и вывести его результаты, foreach(var sites in webAddrs) {
Console.WriteLine("Веб-сайты, сгруппированные " +
"по имени домена " + sites.Key); foreach(var site in sites)
Console.WriteLine (" " + site);
Console.WriteLine;
}
}
}
Эта версия программы дает такой же результат, как и предыдущая. Единственное отличие между ними заключается в том, как формируется запрос. В данной версии для этой цели используются методы запроса.
Рассмотрим другой пример. Но сначала приведем еще раз запрос из представленного ранее примера применения оператораjoin.
var inStockList = from item in items
join entry in statusList
on item.ItemNumber equals entry.ItemNumber select new Temp(item.Name, entry.InStock);