Отбор запрашиваемых значений с помощью оператора where



 

Как пояснялось выше, оператор where служит для отбора данных, возвращаемых по запросу. В предыдущих примерах этот оператор был продемонстрирован в своей простейшей форме, в которой для отбора данных используется единственное условие. Однако для более тщательного отбора данных можно задать несколько условий и, в частности, в нескольких операторах where. В качестве примера рассмотрим следующую программу, в которой из массива выводятся только те значения, которые положительны и меньше 10.

 

// Использовать несколько операторов where.

using System;

using System.Linq;

 

class TwoWheres {

static void Main() {

int [ ] nums = { 1, -2, 3, -3, 0, -8, 12, 19, 6, 9, 10 };

 

Сформировать запрос на получение положительных значений меньше 10.

var posNums = from n in nums where n > 0 where n < 10 select n;

 

Console.Write("Положительные значения меньше 10: ");

Выполнить запрос и вывести его результаты.

foreach(int i in posNums) Console.Write (i + " ");

Console.WriteLine();

}

}

 

Эта программа дает следующий результат.

 

Положительные значения меньше 10: 1 3 6 9

 

Как видите, по данному запросу извлекаются только положительные значения меньше. 10. Этот результат достигается благодаря двум следующим операторам where.

 

where n > 0 where n < 10

 

Условие в первом операторе where требует, чтобы элемент массива был больше нуля. А условие во втором операторе where требует, чтобы элемент массива был меньше 10. Следовательно, запрашиваемый элемент массива должен находиться в пределах от 1 до 9 (включительно), чтобы удовлетворять обоим условиям.

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

 

var posNums = from n in nums

where n>0 && n<10 select n;

 

Как правило, в условии оператора where разрешается использовать любое допустимое в C# выражение, дающее булев результат. Например, в приведенной ниже программе определяется массив символьных строк. В ряде этих строк содержатся адреса Интернета. По запросу в переменой netAddrs извлекаются только те строки, которые содержат более четырех символов и оканчиваются на ".net". Следовательно, по данному запросу обнаруживаются строки, содержащие адреса Интернета с именем . net домена самого верхнего уровня.

 

// Продемонстрировать применение еще одного оператора where.

using System;

using System.Linq;

 

class WhereDemo2 {

static void Main() {

string[] strs = { ".com", ".net", "hsNameA.com",

"hsNameB.net", "test", ".network",

"hsNameC.net", "hsNameD.com" };

 

Сформировать запрос на получение адресов

Интернета, оканчивающихся на .net.

var netAddrs = from addr in strs

where addr.Length > 4 &&

addr.EndsWith(".net", StringComparison.Ordinal)

select addr;

 

Выполнить запрос и вывести его результаты.

foreach(var str in netAddrs) Console.WriteLine(str);

}

}

 

Вот к какому результату приводит выполнение этой программы.

 

HsNameB.net

HsNameC.net

 

Обратите внимание на то, что в операторе where данной программы используется один из методов обработки символьных строк под названием EndsWith(). Он возвращает логическое значение true, если вызывающая его строка оканчивается последовательностью символов, указываемой в качестве аргумента этого метода.

 

 

Сортировка результатов запроса с помощью оператора orderby

 

Зачастую результаты запроса требуют сортировки. Допустим, что требуется получить список просроченных счетов по порядку остатка на счету: от самого большого до самого малого или же список имен заказчиков в алфавитном порядке. Независимо от преследуемой цели, результаты запроса можно очень легко отсортировать, используя такое средство LINQ, как оператор orderby.

Оператор orderby можно использовать для сортировки результатов запроса по одному или нескольким критериям. Рассмотрим для начала самый простой случай сортировки по одному элементу. Ниже приведена общая форма оператора orderby для сортировки результатов запроса по одному критерию:

 

Orderby элемент порядок

 

где элемент обозначает конкретный элемент, по которому проводится сортировка. Это может быть весь элемент, хранящийся в источнике данных, или только часть одного поля в данном элементе. А порядок обозначает порядок сортировки по нарастающей или убывающей с обязательным добавлением ключевого слова ascending или descending соответственно. По умолчанию сортировка проводится по нарастающей, и поэтому ключевое слово ascending, как правило, не указывается.

Ниже приведен пример программы, в которой оператор orderby используется для извлечения значений из массива типа int по нарастающей.

 

// Продемонстрировать применение оператора orderby.

using System;

using System.Linq;

class OrderbyDemo {

static void Main() {

int[] nums = { 10, -19, 4, 7, 2, -5, 0 };

 


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

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






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