Программирование >>  Программирование с использованием ajax 

1 ... 271 272 273 [ 274 ] 275 276 277 ... 396


Описание полученных результатов

Класс Customer и инициализация списка customers остаются теми же, что и в предыдущем примере. В операторе запроса вызывается метод Select () с простым лямбда-выражением для выбора региона из объектов Customer, а затем вызывается Distinct (), чтобы вернуть из Select () только уникальные результаты:

var queryResults = customers.Select(с => с.Region) .Distinct ();

Поскольку Distinct () доступен только в синтаксисе методов, применяется вызов Select О из синтаксиса методов. Однако вызвать Distinct () для модификации запроса можно и в синтаксисе запросов:

var queryResults = (from с in customers select с.Region) .Distinct ();

Поскольку синтаксис запросов транслируется компилятором С# 3.0 в те же серии вызовов методов LINQ, как и в случае синтаксиса методов, можно смешивать их в тех случаях, когда это оправдано для читабельности и стиля.

Any и All

Другой тип запроса, который часто может понадобиться, состоит в определении того, что данные удовлетворяют определенному условию, или в определении того, что все данные удовлетворяют условию. Например, может потребоваться знать, что продукта нет на складе (количество равно нулю) или что транзакция произошла.

LINQ предоставляет булевские методы Any () и All (), которые могут быстро сообщить, истинно ли некоторое условие для существующих данных. Это облегчает задачу поиска данных, которую придется выполнять в следующем практическом занятии.

Практическое 3aH TMjJ[J

Выполните следующие шаги для создания примера в Visual С# 2008.

1. Модифицируйте предыдущий пример 2б-9-SelectDistinctQuery или создайте новое консольное приложение по имени 2 6-10-AnyAndAll в каталоге С:\BegVCSharp\Chapter2 6.

2. Скопируйте код создания класса Customer и инициализации списка customers (List<Customer> customers) из примера 26-7-QueryComplexObjects; этот код тот же самый.

3. В методе Main () после инициализации списка customers и объявления запроса удалите цикл обработки и введите код, как показано ниже:

bool anyUSA = customers.Any(с => с.Country == USA ); if (anyUSA)

Console.WriteLine( Некоторые заказчики находятся в США ); else

Console.WriteLine( Нет заказчиков из США );

bool allAsia = customers.All(с => с.Region == Asia ); f (allAsia)



else {

Console.WriteLine( Не все заказчики находятся в Азии );

4. Остальной код в методе Main () такой же, как и в предыдущем примере.

5. Откомпилируйте и выполните программу. Вы увидите сообщения, указывающие на то, что некоторые заказчики находятся в США, но не все - в Азии:

Некоторые заказчики находятся в США Не все заказчики находятся в Азии

Программа завершена, нажмите Enter для продолжения:

Описание полученных результатов

Класс Customer и инициализация списка customers в предыдущих примерах одинаковы. В первом операторе запроса вызывается метод Any () с простым лямбда-выражением для проверки, имеет ли поле Country в Customer значение USA:

bool anyUSA = customers.Any(с => с.Country == USA );

Метод LINQ Any () применяет переданное ему лямбда-выражение с => с. Country == USA ко всем данным в списке customers и возвращает true, если это лямбда-выражение истинно для любого заказчика в списке.

Затем проверяется результирующая булевская переменная, возвращенная методом Any О , и печатается сообщение, отражающее результат запроса (даже несмотря на то, что метод Any () просто возвращает true или false, он выполняет запрос для получения результата true/false):

If (anyUSA)

Console.WriteLine( Некоторые заказчики находятся в США ); Ise

Console.WriteLine( Нет заказчиков из США );

Хотя можно сделать это сообщение более компактным, применив некоторый хитрый код, оно более наглядно и читаемо в таком виде, как показано здесь. Как и следовало ожидать, переменная anyUSA установлена в true, потому что на самом деле в наборе данных присутствуют заказчики, находящиеся в США, поэтому вы видите сообщение Некоторые заказчики находятся в США.

В следующем операторе запроса вызывается метод All () с другим простым лямбда-выражением, чтобы определить, все ли заказчики находятся в Азии:

bool allAsia = customers.All (с => с.Region == Asia );

Метод LINQ All () применяет переданное ему лямбда-выражение к набору данных и возвращает false, как и следовало ожидать, потому что некоторые из заказчиков находятся не в Азии. Затем на основе значения allAsia печатается соответствующее сообщение.

Многоуровневое упорядочивание

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



алфавитном порядке по региону, а затем - по стране или названию города внутри региона? LINQ позволяет сделать это очень легко, как вы убедитесь в следующем практическом занятии.

Практическое заняшв Многоуровневое упорядочивание

Выполните следующие шаги для создания примера в Visual С# 2008.

1. Модифицируйте предыдущий пример, 26-8-ProjectionCreateNewObjects, или создайте новое консольное приложение по имени 2 6-11-MultiLevelOrdering в каталоге С:\BegVCSharp\Chapter2 6.

2. Создайте класс Customer и инициализацию списка customers, как показано в примере 2 6-7-QueryComplexObjects; этот код точно такой же, как и в предыдущих примерах.

3. В методе Main () после инициализации списка заказчиков введите следующий запрос:

var queryResults =

from с in customers

orderby с.Region, с.Country, c.City

select new { c.ID, c.Region, c.Country, c.City }

4. Цикл обработки запроса и остальной код метода Main () - точно такие же, как и в предыдущих примерах.

5. Откомпилируйте и выполните программу. Вы увидите выбранные свойства из customers, упорядоченные по алфавиту сначала по региону, затем по стране и, наконец, по городу, как показано ниже:

Africa, Country = Egypt, City = Cairo } Africa, Country = Nigeria, City = Lagos } Asia, Country = China, City = Beijing } China, City = Shanghai } India, City = Delhi } India, City = Mumbai } Indonesia, City = Jakarta } Iran, City = Tehran } Japan, City = Tokyo } Korea, City = Seoul } Pakistan, City = Karachi } Turkey, City = Istanbul } Europe, Country = Russia, City = Moscow } Europe, Country = UK, City = London } North America, Country = Mexico, City = Mexico City } North America, Country = USA, City = Los Angeles } North America, Country = USA, City = New York } South America, Country = Brazil, City = Sao Paulo } South America, Country = Colombia, City = Bogot б } South America, Country = Peru, City = Lima } Программа завершена, нажмите Enter для продолжения:

Описание полученных результатов

Класс Customer и список инициализации customers - такие же, как и в предыдущих примерах. В этом запросе нет конструкции where, потому что нужно увидеть всех

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Region

Asia, Country

Asia, Country

Asia, Country

Asia, Country

Asia, Country

Asia, Country

Asia, Country

Asia, Country

Asia, Country



1 ... 271 272 273 [ 274 ] 275 276 277 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика