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

1 ... 266 267 268 [ 269 ] 270 271 272 ... 396


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

Эта программа почти идентична предыдущему примеру, за исключением одной дополнительной строки, добавленной к оператору запроса:

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



1 ... 266 267 268 [ 269 ] 270 271 272 ... 396

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