Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных»


Скачать 294.36 Kb.
НазваниеМетодические указания к лабораторной работе по дисциплине «Постреляционные базы данных»
страница2/4
ТипМетодические указания
1   2   3   4

Операции запросов LINQ


В языке C# определено множество операций запросов в готовом виде.

Таблица №1. Операции запросов LINQ

Операции запросов

Назначение

from, in

Используется для определения основы любого выражения LINQ, позволяющей извлечь подмножество данных из нужного контейнера.

where

Используется для определения ограничений о том, какие элементы должны извлекаться из контейнера.

select

Используется для выбора последовательности из контейнера.

join on, equals, into

Выполняет соединения на основе указанного ключа.

orderby, ascending, descending

Позволяет упорядочить результирующий набор в порядке возрастания или убывания.

group by

Порождает подмножество с данными, сгруппированными по указанному значению.


В дополнение к частичному списку операций, приведенному в таблице 1, класс System.Linq.Enumerable предлагает набор методов, которые не имеют прямой сокращенный синтаксис в форме операций запроса C#, а представлены в виде расширяющих методов. Эти обобщенные методы могут вызываться для трансформации результирующего набора в различной манере

Reverse<>(), ToArray<>(), ToList<>() и т.п.

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

Distrinct<>(), Union<>(), Intersect<>() и т.п.,

третьи агрегируют результаты

Count<>(), Sum<>(), Min<>(), Max<>() и т.п..

Базовый синтаксис выборки


Поскольку синтаксическая корректность выражения запроса LINQ проверяется во время компиляции, следует помнить, что порядок этих операций важен. В простейшем виде каждый запрос LINQ строится из операций from, in и select. Ниже показан базовый шаблон:

var результат = from сопоставляемыйЭлемент in контейнер

select сопоставляемыйЭлемент

Элемент, следующий за операцией from, представляет элемент, соответствующий критерию запроса LINQ, и назвать его можно по своему усмотрению. Элемент после операции in представляет контейнер данных для поиска (массив, коллекция или документ XML). Рассмотрим очень простой запрос, который извлекает каждый элемент контейнера (аналог SQL-выражения SELECT * FROM имяТаблицы).

C#

Листинг №6. Базовый синтаксис выборки

var persons = new[]{

new { cityName = "Moscow", fio = "Almaev", age = 21, passport = "2367" },

new { cityName = "Saint-Petersburg", fio = "Budilin", age = 3, passport = "g456sdv" },

new { cityName = "New Fryazino", fio = "Shivalina", age = 21, passport = "6756" },

new { cityName = "Saint-Petersburg", fio = "Golovanov", age = 57, passport = "g456" }

};
Console.WriteLine("All persons");
var allPersons = from p in persons select p;
foreach (var pers in allPersons)

Console.WriteLine(pers.ToString());






Рис. 3. Результат выполнения программы №6

Получение подмножества данных


Чтобы получить определенное подмножество данных из контейнера, можно воспользоваться операцией where. При этом общий шаблон запроса становится таким:

var результат = from сопоставляемыйЭлемент in контейнер

where булевскоеВыражение

select сопоставляемыйЭлемент

Например, следующий запрос вернет все объекты, старше 21.

C#

Листинг №7. Получение подмножества данных

Console.WriteLine("All persons with age == 21");
var allPersons21 = from p in persons where p.age == 21 select p;
foreach (var pers in allPersons21)

Console.WriteLine(pers.ToString());






Рис. 4. Результат выполнения программы №7

Получение счетчиков данных


При проектировании новых пакетов данных может понадобиться знать количество элементов перед тем, как вернуть их последовательности. Для определения числа элементов, возвращаемых выражением LINQ, используется расширяющий метод Count() класса Enumerable.

Следующий запрос вернет количество всех элементов выборки.

C#

Листинг №8. Получение счетчиков данных

Console.WriteLine("All persons count");
var allPersonsCount = (from p in persons select p).Count();
Console.WriteLine(allPersonsCount);



Рис. 5. Результат выполнения программы №8

Выражения сортировки


Выражение запроса может принимать операцию orderby для сортировки элементов в подмножестве по заданному значению. По умолчанию принят порядок по возрастанию, поэтому упорядочение по умолчанию строк производится в алфавитном порядке, числовых значений – от меньшего к большему и т.д. Чтобы отсортировать в обратном порядке, следует указать операцию descending. Хотя порядок по возрастанию принят по умолчанию, можно прояснить намерения, явно указав операцию ascending.

Следующий запрос упорядочивает все элементы выборки сначала по полю fio по возрастанию, затем по убыванию.

C#

Листинг №9. Выражения сортировки

Console.WriteLine("All persons order by ascending");
var allPersonsCount = from p in persons orderby p.fio ascending select p;
foreach (var pers in allPersonsCount)

Console.WriteLine(pers.ToString());

Console.WriteLine("\nAll persons order by descending");
allPersonsCount = from p in persons orderby p.fio descending select p;
foreach (var pers in allPersonsCount)

Console.WriteLine(pers.ToString())






Рис. 6. Результат выполнения программы №9



Выражения группировки


Предложение group возвращает последовательность объектов IGrouping, содержащих ноль или более элементов, соответствующих значению ключа группы. Например, можно сгруппировать последовательность строк в соответствии с первой буквой каждой из строк. В этом случае первая буква является ключом и имеет тип char. Она хранится в свойстве Key каждого из объектов IGrouping. Тип ключа определяется компилятором.

Следующий запрос группирует элементы по полю cityName. Результат формируется через Анонимный тип «на лету»

C#

Листинг №10. Выражения группировки

Console.WriteLine("All persons grouped by cityName");
var allPersonsCount = from p in persons

group p by p.cityName into g

select new { cityName = g.Key , pers = g };
foreach (var pers in allPersonsCount)

{

Console.WriteLine(pers.cityName);

foreach (var g in pers.pers)

Console.WriteLine(" fio = {0}, age = {1}, passport = {2}", g.fio, g.age, g.passport);

}









Рис. 7. Результат выполнения программы №10

Исключение дубликатов


После вызова расширяющего метода Concat() очень легко можно получить в результате излишние элементы, что иногда приемлемо. В остальных случаях может понадобиться удалить дублированные элементы данных. Для этого необходимо вызвать расширяющий метод Distinct().

C#

Листинг №12. Исключение дубликатов

List person1 = new List { "Almaev", "Budilin", "Golovanov" };

List person2 = new List { "Tyukavin", "Budilin", "Omar" };
var personConcat = (from p in person1 select p).Concat(from p2 in person2 select p2);

Console.WriteLine("Person Concat with Distinct:");

foreach (var s in personConcat.Distinct())

Console.Write(s + " ")




Рис. 9. Результат выполнения программы №12

Агрегатные операции


Запросы LINQ могут также выполнять различные агрегатные операции над результирующим набором. Одним из примеров агрегации может служить расширяющий метод Count() (см. раздел 3.3). Другие возможности включают получение среднего, максимума, минимума или суммы значений за счет использования методов Average(), Max(), Min(), Sum(), соответственно. Эти методы являются членами класса Enumerable.

C#

Листинг №13. Агрегатные операции

double[] temperature = { 2.0, -21.3, 8, -4, 0, 8.2 };

Console.WriteLine("Max temp: {0}", (from t in temperature select t).Max());

Console.WriteLine("Min temp: {0}", (from t in temperature select t).Min());

Console.WriteLine("Average temp: {0}", (from t in temperature select t).Average());

Console.WriteLine("Sum of all temps: {0}", (from t in temperature select t).Sum());




Рис. 10. Результат выполнения программы №13



Точечный синтаксис


Вторым вариантом LINQ запросов является точечный синтаксис, реализованный через расширяющие методы и лямбда-выражения.

Например, вывести имена, которые начинаются с А, создав новые объекты на лету (с полями name и len), с сортировкой по длине (поле len):

static void Main(string[] args)

{

List names = new List{ "Anna", "Vasja","Kolja","Lizs","Ksenia","Annabell","Agela","Tolik","Tom"};

var arr = names.Where( x => x.StartsWith("A") ).Select( x => (new {name=x,len=x.Length} ) ).OrderBy(y => y.len);
foreach( var a in arr)

Console.WriteLine("Res - name {0}, len {1}", a.name, a.len);

Console.ReadKey();

}


1   2   3   4

Похожие:

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconМетодические указания к лабораторным работам по дисциплине «Постреляционные базы данных»
Целью лабораторной работы является практическое изучение возможностей постреляционного расширения языка sql для создания хранимых...

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconМетодические указания к практическим работам по дисциплине «Базы данных»
Методические указания предназначены для проведения практических занятий по дисциплине «Базы данных», для специальности ксиК

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconМетодические указания к лабораторной работе «делопроизводство»
Андреев Б. Ф., Гусева А. И. Методические указания к лабораторной работе «Делопроизводство» для студентов специальности «Менеджмент...

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconПояснительная записка к курсовой работе по дисциплине «Базы данных»
Метод исследования – моделирование базы данных в программе Microsoft Access 2013

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconМетодические указания для выполнения курсового проекта по дисциплине «Базы данных»
Одобрена предметной комиссией «программного обеспечения и информационных технологий»

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconПояснительная записка к курсовой работе по дисциплине «Базы данных»
Фио, категория клиента, паспортные данные (свидетельства о рождении), контактные данных)

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconПояснительная записка к курсовой работе по дисциплине «Базы данных»
Спроектировать реляционную базу данных «Магазин дисков для детей «Childs Dream»». Бд обеспечивает выполнение следующих запросов

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconМетодические указания для выполнения лабораторных работ и «Базы данных»
Лабораторная работа №1 «Организация хранения данных в субд ms access»

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconЛабораторная работа №1 Принципы Управления проектами с использованием microsoft project 6
Управление проектами с помощью Microsoft Project: Методические указания к лабораторной работе по дисциплине «Основы организационного...

Методические указания к лабораторной работе по дисциплине «Постреляционные базы данных» iconМетодические указания для архивных отделов (архивов) муниципальных...
Информация базы данных служит основой для составления отчетов, паспорта архива, сведений для фондовых каталогов, может быть использована...

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск