|
Программирование >> Программирование с использованием ajax
Описание полученных результатов Эта программа почти идентична предыдущему примеру, за исключением одной дополнительной строки, добавленной к оператору запроса: var queryResults = from n in names where n.StartsWith( S ) orderby n select n; Конструкция orderby Конструкция orderby выглядит следующим образом: orderby n Подобно where, конструкция orderby необязательна. Добавив всего одну строку, вы можете выстроить в нужном порядке результаты любого запроса, что в противном случае потребовало бы нескольких строк дополнительного кода и, возможно, дополнительных методов или коллекций для хранения результатов, упорядоченных различным образом в зависимости от алгоритма сортировки, который вы предпочтете реализовать. Если у вас несколько типов, которые нужно упорядочить, вам пришлось бы реализовать множество методов упорядочивания для каждого из них. Благодаря LINQ, вам более не нужно беспокоиться об этом; просто добавьте дополнительную конструкцию к оператору запроса. По умолчанию orderby упорядочивает элементы результата по возрастанию (от А до Z), но вы можете специфицировать и порядок убывания (от Z до А), просто добавив ключевое слово descending: orderby n descending Это упорядочит результат примера следующим образом: Smythe Smith Small Singh Samba Плюс к тому можно упорядочить по произвольному выражению, не переписывая запрос. Например, чтобы упорядочить по последней букве в имени вместо нормального алфавитного порядка, вы просто изменяете конструкцию orderby следующим образом: orderby п.Substring(п.Length - 1) Результат показан ниже: Samba Smythe Smith Singh Small Обратите внимание, что последние буквы выстроены по алфавиту (а е h h 1). Упорядочивание с использованием синтаксиса методов Чтобы добавить к запросу такие возможности, как упорядочивание результата, просто добавьте вызов метода для каждой операции LINQ, которую хотите выполнить в своем запросе LINQ на основе методов. Опять-таки, это проще, чем может показаться на первый взгляд. jjgjKni4ecKoe занятие Упорядочение с использованием синтаксиса методов Выполните следующие шаги для создания примера в Visual С# 2008. 1. Вы можете либо модифицировать пример 26-2-LINQMethodSyntax, либо создать новый проект консольного приложения по имени 2 6-4-OrderMethodSyntax в каталоге C:\BegVCSharp\Chapter26. 2. Добавьте следующий код в метод Main () в Program, cs. Как и во всех примерах Visual С# 2008, он автоматически включит ссылку на пространство имен System. Linq. 3. Код, отличающийся от предыдущего примера синтаксиса метода, выделен полужирным: static void Маш (string [ J args) { stringU names = { Alonso , Zheng , Smith , Jones , Smythe , Small , Ruiz , Hsieh , Jorgenson , Ilyich , Singh , Samba , Fatimah }; var queryResults = names.OrderBy(n => n) .Where(n => n.StartsWith( S )) ; Console.WriteLine( Names beginning with S: ); foreach (var item in queryResults) { Console.WriteLine(item); Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine(); 4. Откомпилируйте и запустите программу. Вы увидите список имен, начинающихся с S, в алфавитном порядке - точно так де, как и в выводе предыдущего примера. Описание полученных результатов Этот пример почти идентичен предыдущему примеру синтаксиса метода, за исключением добавления вызова метода LINQ QueryBy (), предшествующего вызову метода Where О: var queryResults = names.OrderBy(n => n).Where(n => n.StartsWith( S )); Как вы, возможно, заметили в IntelliSense, набирая код в редакторе, метод OrderBy О возвращает lOrderedEnumerable, который является надмножеством интерфейса lEnumerable, поэтому можно вызывать Where () на нем точно так же, как это делается с любым другим объектом lEnumerable. Компилятор делает вывод, что вы работаете с данными string, поэтому типы данных появляются в IntelliSense как IOrderedEnumerable<string> и IEnumerable<string>. Вы должны передать лямбда-выражение методу OrderBy (), чтобы сообщить ему, какую функцию следует применять для упорядочивания. Вы передаете простейшее возможное лямбда-выражение п => п, потому что не нуждаетесь в упорядочивании ничего другого, кроме самого выводимого значения. В синтаксисе запросов создавать это дополнительное лямбда-выражение не нужно. Чтобы упорядочить элементы в обратном порядке, вызывайте метод OrderByDescending(): var queryResults = names.OrderByDescending(n => n).Where(n => n.StartsWith( S )) ; Это даст те же результаты, что и конструкция orderby п descending, которая применялась в версии с синтаксисом запросов. Если нужно упорядочить по чему-то отличающемуся от самого значения, вы можете изменить передаваемое OrderBy () лямбда-выражение. Например, чтобы упорядочить по последней букве каждого имени, необходимо использовать следующее лямбда-выражение: п => п. Substring (п. Length-1) и передать его OrderBy, как показано ниже: var queryResults = names.OrderBy(n => n.Substring(n.Length-1)).Where(n => n.StartsWith( S )); Это даст тот же результат, упорядоченный по последней букве имени, как и в предыдущем примере. Упорядочивание больших наборов данных Вы можете сказать, что в синтаксисе LINQ все прекрасно, но в чем смысл всего этого? Вы можете и без него замечательно увидеть нужный результат, просто взглянув на исходный массив, так зачем же морочить голову, выстраивая запросы того, что и так очевидно? Как упоминалось ранее, иногда результаты запроса не столь очевидны. В следующем практическом занятии вы создадите огромный массив чисел и выполните запрос к нему с помощью LINQ. Выполните следующие шаги для создания примера в Visual С# 2008. 1. Создайте новое консольное приложение по имени 26-5-LargeNumberQuery в каталоге С: \BegVCSharp\Chapter26. Как и ранее, при создании этого проекта Visual С# 2008 включит необходимое пространство имен LINQ в файл Program, cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; 2. Добавьте следующий код в метод Main (): static void Main(string [ ] args) int[] numbers = generateLotsOfNumbers(12345678); var queryResults = from n in numbers where n < 1000 select n
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |