|
Программирование >> Программирование с использованием ajax
Описание полученных результатов Класс 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, потому что нужно увидеть всех
Asia, Country Asia, Country Asia, Country Asia, Country Asia, Country Asia, Country Asia, Country Asia, Country Asia, Country
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |