Иногда возникает потребность временно сохранить некоторое значение в самом запросе. Допустим, что требуется создать переменную перечислимого типа, которую можно будет затем запросить, или же сохранить некоторое значение, чтобы в дальнейшем использовать его в операторе where. Независимо от преследуемой цели, эти виды функций могут быть осуществлены с помощью оператора let. Ниже приведена общая форма оператора let:
let имя = выражение
где имя обозначает идентификатор, получающий значение, которое дает выражение. Тип имени выводится из типа выражения.
Когда приходится иметь дело с базами данных, то зачастую требуется формировать последовательность, увязывающую данные из разных источников. И это нетрудно сделать с помощью такого средства LINQ, как оператор join.
Ниже приведена общая форма оператора join.
from переменная_диапазона_А in источник_данных_А
join переменная_диапазона_В in источник_данных_В
on переменная_диапазона_А.свойство equals переменная_диапазона_В.свойство
Применяя оператор join, следует иметь в виду, что каждый источник должен содержать общие данные, которые можно сравнивать. Поэтому в приведенной выше форме этого оператора источник_данных_А и источник_данных_В должны иметь нечто общее, что подлежит сравнению. Сравниваемые элементы данных указываются в части on данного оператора. Поэтому если переменная_диапазона_А.свойство и переменная_диапазона_B.свойство равны, то эти элементы данных "увязываются" успешно. По существу, оператор join выполняет роль своеобразного фильтра, отбирая только те элементы данных, которые имеют общее значение.
Другой способ формирования запросов состоит в использовании методов запроса, которые могут вызываться для любого перечислимого объекта.
Методы запроса определяются в классе System.Linq.Enumerable и реализуются в виде методов расширения функций обобщенной формы интерфейса IEnumerable<T>.
В классе Enumerable предоставляется немало методов запроса, но основными считаются те методы, которые соответствуют описанным ранее операторам запроса. Эти методы перечислены в табл. 6 вместе с соответствующими операторами запроса. Следует, однако, иметь в виду, что эти методы имеют также перегружаемые формы, а здесь они представлены лишь в самой простой своей форме. Но именно эта их форма используется чаще всего.
Таблица 6.
Основные методы запроса
Оператор запроса |
Эквивалентный метод запроса |
select |
Select(selector) |
where |
Where(predicate) |
orderby |
OrderBy(keySelector) или OrderByDescending(KeySelector) |
join |
Join(inner, outerKeySelector, innerKeySelector, result Selector) |
group |
GroupBy(keySelector) |
Переделаем пример простого запроса, представленный в начале главы, с использованием методов запроса Select() и Where():
using System;
using System.Linq;
class SimpQuery {
static void Main() {
int[] nums = { 1, -2, 3, 0, M, 5 };
// Использовать методы Where() и Select() для
// формирования простого запроса.
var posNums = nums.Where(n => n > 0).Select(r => r);
Console.Write("Положительные значения из массива nums: ");
// Выполнить запрос и вывести его результаты.
foreach(int i in posNums) Console.Write(i + " ");
Console.WriteLine ();
}
}
C# является основным языком разработки программ на платформе .NET корпорации Microsoft. В нем удачно сочетаются испытанные средства программирования с самыми последними новшествами и предоставляется возможность для эффективного и очень практичного написания программ, предназначенных для вычислительной среды современных предприятий. Это, без сомнения, один из самых важных языков программирования XXI века.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Шилдт Г. Полное руководство C#4.0. / Г. Шилдт. – М.: ООО «И.Д. Вильямс», 2011. – 1056 с.
Троэлсен Э. Язык программирования С# 2010 и платформа .NET 4.0 / Э. Троэлсен. – М.: ООО «И.Д. Вильямс», 2011. – 1392 с.
Kumar S.N. LINQ quickly / S.N. Kumar. – Packt Publishing, 2007. – 250 c.
Страуструп Б. Дизайн и эволюция C++ / Б. Страуструп. – СПб: Питер, 2006. – 445 с.
Clark D. Beginning C# Object-Oriented Programming / D. Clark – Apress, 2011. – 371 c.
Либерти Дж. Программирование на C# / Дж. Либерти. – М.: Символ-плюс, 2003. – 690 c.
Петцольд Ч. Программирование в тональности С# / Ч. Петцольд. – М.: ИТД «Русская редакция», 2004. – 503 с.
Рихтер Дж. Программирование на платформе Microsoft.NET Framework / Дж. Рихтер. – М.: ИТД «Русская редакция», 2003. – 512 с.
Павловская Т.А. C#. Программирование на языке высокого уровня / Т.А. Павловская. – СПб: Питер, 2007. – 432 с.
Richter J. CLR via C# 3rd Edition / J. Richter – Ms Press – 896 с.
Watson K. Beginning Visual C# 2010 / K. Watson, C. Nagel, J.H. Pedersen – wrox – 1080 c.
2. Понятие класса и объекта класса. Инкапсуляция в C# 16
2.1. Понятие класса и объекта класса. Создание объектов. Данные и методы класса 16
2.2. Передача параметров в методы класса 23
2.3. Конструкторы и деструкторы 25
2.4. Инкапсуляция в C# 28
3. Индексаторы и свойства 34
3.1. Индексаторы 34
3.2. Свойства 35
4. Наследование в C# 39
5. Полиморфизм в C#. Интерфейсы 43
5.1. Виртуальные методы и их переопределение 43
5.2. Применение абстрактных классов 45
5.3. Интерфейсы 46
6. Система типов языка C# 52
7. Структуры и перечисления 58
7.1. Тип enum 58
7.2. Типы структур 60
8. Операторы и управляющие конструкции языка C# 64
8.1. Арифметические операторы 64
8.2. Операторы отношения и логические операторы 65
8.3. Оператор присваивания 67
8.4 Оператор ? 68
8.5 Управляющие операторы 69
9. Массивы и строки 77
9.1. Массивы в C# 77
9.1.1. Одномерные массивы 77
9.1.2. Многомерные массивы 79
9.1.3. Ступенчатые массивы 81
9.2. Строки 83
9.2.1. Постоянство строк 85
10. Платформа .NET. Основные понятия и принципы работы 88
11. Пространства имен. Сборки 95
11.1. Пространства имён 95
11.2. Сборки 98
12. Время жизни переменных и область видимости переменных. Оператор new и сборка мусора 100
12.1. Тип System.CG 104
12.2. Финализация объектов 107
12.3. Создание высвобождаемых объектов 109
13. Исключения. Генерация и обработка 111
13.1. Основы обработки исключительных ситуаций 112
13.2. Применение пары ключевых слов try и catch 113
13.3. Генерирование исключений вручную 115
13.4. Использование блока finally 117
13.5. Класс Exception и получение производных классов 118
13.6. Ключевые слова checked и unchecked 121
14. Обобщения (шаблоны) и их применение в языке C# 123
15. Основные классы коллекций объектов 128
15.1. Интерфейсы необобщенных коллекций 130
15.1.1. Интерфейс ICollection 132
15.1.2. Интерфейс IList 132
15.1.3. Интерфейс IDictionary 135
16. Использование LINQ для работы с коллекциями 138
16.1. Простой запрос 139
16.2. Общая форма запроса 141
16.3. Сортировка результатов запроса с помощью оператора orderby 142
16.4. Операторы group, into, let и join 143
16.5. Методы запроса 145
16.6. Формирование запроса с помощью методов запроса 146
Заключение 148
Библиографический список 149
Учебное издание
Карпеев Дмитрий Олегович
Транин Валерий Александрович
Объектно-ориентированное
Программирование на языке C#
В авторской редакции
Компьютерный набор В.А. Транина
Подписано к изданию 30.06.2011.
Объем данных 630 Кб.
ФГБОУ ВПО «Воронежский государственный технический университет»