Слайд 1Лекция №8 LINQ запросы
Москва, 2019
Слайд 2Задача на автомат
1. Служба под Windows
2. Должен быть лог файл.
3.
Служба работает с базой данных.
4. Многонитевой программирование. Очередь запросов.
5. Разработка
через тестирование.
6. Абстрактные класс и интрефейсы.
Слайд 4LINQ - технология
Расширение возможностей запросов к данным в синтаксисе языка
C#
Источник данных должен поддерживать интерфейс IEnumerable.
Запросы обычно выражаются на специализированном
языке запросов.
Для различных типов источников данных, например, SQL для
реляционные базы данных и XQuery для XML.
Новый язык запросов для каждого типа данных.
LINQ упрощает эту ситуацию, предлагая
согласованную модель для работы с данными в различных виды источников данных и форматов.
В запросе LINQ вы всегда работаете с объектами.
Поставщик LINQ доступен
Слайд 5LINQ - технология
В выражении Linq запроса указывается источник данных,
фильтрация,
группировка,
сортировка данных
Классификация LINQ
LINQ to Object
LINQ to Object обеспечивает
поддержку взаимодействия с объектами .NET в памяти, которые реализуют интерфейс IEnumerable
LINQ to Entities
Он более гибкий, чем LINQ to SQL
LINQ to SQL – исключительно к MSSQL
Слайд 6LINQ - технология
Последовательность – любой объект, который реализует IEnumerable,
а элемент
– элемент этой последовательности.
Элементами могут быть атомарными, коллекции, фрагменты XML
документов.
Запрос не изменяет исходную последовательность, а возвращает новую.
LINQ to Dataset обеспечивает поддержку взаимодействия с кэшем данных в памяти
LINQ to SQL, также известный как DLINQ, обеспечивает поддержку взаимодействия с базой данных MSSQL
Слайд 7LINQ - технология
LINQ to XML, также известный как XLINQ, обеспечивает
поддержку взаимодействия с документами XML, т. Е. Для загрузки
XML-документы, а
также выполнять запросы, такие как чтение, фильтрация, изменение, добавление узла
Операторы LINQ на самом деле представляют собой набор методов расширения. Эти операторы образуют шаблон LINQ. Эти
операторы предлагают гибкость для запроса данных, таких как фильтрация данных, сортировка и т. д.
Следующие операторы запроса LINQ мы обсудим:
1. Оператор фильтрации Where
2. Оператор проекции Select
3. Присоединение к оператору JOIN
Слайд 8LINQ - технология
4. Группировка оператора
5. Оператор раздела
6. Агрегация
Присоединение к оператору
Оператор
соединения используется для объединения двух или более последовательностей или коллекций
на основе некоторого ключа и создания результата
Оператор группировки используется для организации элементов на основе заданного ключа. GroupBy Вернуть последовательность элементов в группах IGroup
group…..by group…by..into
GroupBy()
Слайд 9LINQ - технология
Оператор разделения используется для разделения коллекции или последовательности
на две части и возврата оставшейся части
(запись), оставленная следствием этих
операторов разбиения
Skip Пропустить предоставленное количество записей и вернуться
остальные.
Skip
(<число>)
Take Получить предоставленное количество записей и пропустите
остальные.
Take()
Агрегация означает применение агрегатных функций в LINQ. Агрегатная функция - это функция, которая вычисляет
запрос и возвращает одно значение.
Слайд 10LINQ - технология
LINQ предоставляет различные способы взаимодействия с источниками данных
для их запроса. Это облегчает разработчикам SQL
взаимодействовать с различными источниками
данных для запроса с использованием C #, предоставляя им синтаксис LINQ Query.
Синтаксис метода LINQ..
Запрос LINQ.
Слайд 11Анонимные типы
В объектно-ориентированных языках (таких как C #) обычно определяют
небольшие классы, которые будут использоваться только один раз. Типичным примером
является класс Point, который имеет только два поля - координаты точки. Создание простого класса с идеей использовать его только один раз неудобно и отнимает много времени для программиста, особенно когда стандартные операции для каждого класса: ToString (), Equals () и GetHashCode () должны быть предопределены.
В C # есть встроенный способ создания одноразовых типов, называемых анонимными типами. Объекты такого типа создаются почти так же, как и другие объекты в C #. Дело в том, что нам не нужно заранее определять тип данных для переменной. Ключевое слово var указывает компилятору, что тип переменной будет автоматически определяться выражением после знака равенства. На самом деле у нас нет выбора, так как мы не можем указать конкретный тип переменной, потому что она определена как одна из анонимных типов. После этого мы указываем имя для объекта, затем оператор "=" и ключевое слово new. В фигурных скобках мы перечисляем имена и значения свойств анонимного типа.
Слайд 12Анонимные типы
Anonymous Types – Example
Here is an example of creating
an anonymous type that describes a car:
var myCar = new
{ Color = "Red", Brand = "BMW", Speed = 180 };
Console.WriteLine("My car is a {0} {1}.",
myCar.Color, myCar.Brand);
Console.WriteLine("It runs {0} km/h.", myCar.Speed);
Массивы анонимных типов
Анонимные типы, как и обычные, могут использоваться в качестве элементов массивов. Мы можем инициализировать их ключевым словом new, за которым следуют квадратные скобки. Значения элементов массива перечислены так же, как
var arr = new[] {
new { X = 3, Y = 5 },
new { X = 1, Y = 2 },
new { X = 0, Y = 7 }
};
foreach (var item in arr)
{
Console.WriteLine(item.ToString());
}
Слайд 13Анонимные типы
List list = new List() { 1, 2, 3,
4, 5, 6 };
List evenNumbers = list.FindAll(x => (x %
2) == 0);
foreach (var num in evenNumbers)
{
Console.Write("{0} ", num);
}
Console.WriteLine();
The result is:
2 4}
Слайд 15LINQ - технология
LINQ предоставляет синтаксис метода для взаимодействия с различными
источниками данных для их запроса. В основном, он использует
методы расширения
для запроса данных.
где результат должен иметь тип возвращаемых данных. Вы также можете использовать тип var, если вы не уверены в возвращаемом типе данных.
Слайд 16LINQ - технология
Получить фрукты, название которых начинается с «А». Поэтому
мы делаем запрос на фрукты (источник данных)
чтобы получить требуемый результат.
Слайд 17LINQ - технология
также можем дополнительно применить другой оператор
(метод расширения) по
тому же запросу, чтобы подсчитать количество фруктов
Слайд 21LINQ - технология
При работе с запросами LINQ у него всегда
есть три шага или действия:
1. Получить источник данных
2. Создайте запрос
3.
Выполнить запрос
Слайд 22Немедленное выполнение запроса
Немедленное выполнение запроса - это выполнение во время
написания запроса. Это заставляет запрос LINQ. выполнить и немедленно возвращает
результаты. Выполняя методы ToList
или ToArray для запроса, вы можете принудительно выполнить его немедленно.
Сколько ноуnбуков имеющий ч/б дисплей и сколько цветных.
SELECT color, Count(*)
FROM laptop
GROUP BY color
ч.б 10
Цв 20
Id, hd, ram, color
10 20 ч.б
20 10 ч.б
30 20 Цв
Слайд 23LINQ - технология
Запрос SelectMany включает в себя различные свойства, которые
не определены ни в одном классе, и может получить
результат запроса
путем доступа к этим свойствам анонимного типа. Этот тип запроса называется анонимным
Слайд 24Группирование
Оператор группировки используется для организации последовательности элементов в группах как
IGroup .
Слайд 25Разделение
Оператор разделения используется для разделения коллекции или последовательности на две
части и возврата оставшейся
оставленный следствием одного из этих операторов разбиения.
Он содержит операторы Take и Skip.
var sortedDogs = dogs.OrderByDescending(x => x.Age);
Слайд 26Агрегация
Агрегатная функция используется для вычисления запроса и возврата одного значения.
Слайд 31LINQ
Для группировки результатов по некоторым критериям следует использовать группу ключевых
слов. Шаблон выглядит следующим образом:
group [variable name] by [grouping condition]
into [group name]
Результатом группировки является новая коллекция специального типа, которую можно использовать в дальнейшем в запросе. Однако после группировки запрос перестает работать с его начальной переменной. Это означает, что в операторе select мы можем использовать только группу. Пример группировки:
Слайд 33LINQ
В запросе для каждого числа вычисляется делитель числа%, а для
каждого другого результата создается новый.
Далее в запросе оператор select работает
со списком созданных групп, и для каждой группы создает анонимный тип с двумя свойствами: Remainder и Numbers. Свойству Remainder присваивается ключ группы (в нашем случае остаток от деления на делитель числа). А свойству Numbers присваивается группа сбора, которая содержит все элементы в группе. Обратите внимание, что выбор выполняется только по списку групп. Номер переменной не может быть использован там. Далее в примере двух вложенных операторов foreach печатаются остатки (группы) и числа, у которых есть остаток (расположенный в группе).
List list = new List();
list.AddRange(Enumerable.Range(1, 100000));
var elements = list.Where(e => e > 20000);
var element = list.Where(e => e > 20000).First();
Слайд 34LINQ, HashSet
HashSet set = new HashSet();
for (int i =
0; i < 50000; i++)
{
set.Add(Guid.NewGuid()); // Add random
GUID
}
Guid keyForSearching = new Guid();
for (int i = 0; i < 50000; i++)
{
// Use HashSet.Contains(…)
bool found = set.Contains(keyForSearching);
}
bool found = set.Where(g => g==keyForSearching).Count() > 0;
Слайд 35LINQ, упражнения
Напишите класс student со следующими свойствами: имя, фамилия и
возраст. Напишите метод, который для данного массива student находит тех,
чье имя совпадает заданному в массиве. Используйте LINQ