Использовать методы запроса для группирования



Веб-сайтов по имени домена самого верхнего уровня.

var webAddrs = websites.Where(w => w.LastIndexOf('.') != 1).

GroupBy(x => x.Substring(x.LastIndexOf(".", x.Length)));

 

// Выполнить запрос и вывести его результаты, foreach(var sites in webAddrs) {

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);

 

По этому запросу формируется последовательность, состоящая из объектов, инкапсулирующих наименование товара и состояние его запасов на складе. Вся эта информация получается путем объединения двух источников данных: items и statusList. Ниже приведен переделанный вариант данного запроса, в котором вместо синтаксиса, предусмотренного в C# для запросов, используется метод запроса Join().

 

// Использовать метод запроса Join() для составления списка

// наименований товаров и состояния их запасов на складе,

var inStockList = items.Join(statusList,

kl => kl.ItemNumber,

k2 => k2.ItemNumber,

(kl, k2) => new Temp(kl.Name, k2.InStock) );

 

В данном варианте именованный класс Temp используется для хранения результирующего объекта, но вместо него можно воспользоваться анонимным типом. Такой вариант запроса приведен ниже.

 

var inStockList = items.Join(statusList,

kl => kl.ItemNumber,

k2 => k2.ItemNumber,

(kl, k2) => new { kl.Name, k2.InStock} );

 

 

Синтаксис запросов и методы запроса

 

Как пояснялось в предыдущем разделе, запросы в C# можно формировать двумя способами, используя синтаксис запросов или методы запроса. Любопытно, что оба способа связаны друг с другом более тесно, чем кажется, глядя на исходный код программы. Дело в том, что синтаксис запросов компилируется в вызовы методов запроса. Поэтому код

 

where х < 10

 

будет преобразован компилятором в следующий вызов.

 

Where(х => х < 10)

 

Таким образом, оба способа формирования запросов в конечном итоге сходятся на одном и том же.

Но если оба способа оказываются в конечном счете равноценными, то какой из них лучше для программирования на С#? В целом, рекомендуется чаще пользоваться синтаксисом запросов, поскольку он полностью интегрирован в язык С#, поддерживается соответствующими ключевыми словами и синтаксическим конструкциями.

 

 

Дополнительные методы расширения, связанные с запросами

 

Помимо методов, соответствующих операторам запроса, поддерживаемым в С#, име-ется ряд других методов расширения, связанных с запросами и зачастую оказывающих помощь в формировании запросов. Эти методы предоставляются в среде .NET Framework и определены для интерфейса IEnumerable<T> в классе Enumerable. Ниже приведены наиболее часто используемые методы расширения, связанные с запросами. Многие из них могут перегружаться, поэтому они представлены лишь в самой общей форме.

 

Метод Описание

 

All(predicate)  Возвращает логическое значение true,

Если все элементы в последовательности

Удовлетворяют условию, задаваемому параметром

predicate 

Any(predicate)   Возвращает логическое значение true, если

Любой элемент в последовательности удовлетворяет

условию, задаваемому параметром  predicate 

Average()  Возвращает среднее всех значений в числовой

Последовательности

Contains(value)   Возвращает логическое значение true, если

В последовательности содержится указанный объект

Count()  Возвращает длину последовательности, т.е.

Количество составляющих ее элементов

First()  Возвращает первый элемент в последовательности

Last()  Возвращает последний элемент в последовательности

Max()  Возвращает максимальное значение в

Последовательности


Дата добавления: 2019-02-12; просмотров: 254; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!