Источники данных LINQ РУБД
LINQ (Language Integrated Query, язык интегрированных запросов ) это технология, которая позволяет разработчикам формировать в программном коде запросы, основанные на наборах, без использования дополнительного языка запросов.
Запросы LINQ можно писать к различным перечислимым источникам данных, таких как : хранимые в памяти структуры данных, XML- документы, базы данных SQL; объекты DataSet.
Достоинства LINQ LINQ позволяет с помощью собственных средств формировать запросы для любого совместимого с LINQ источника, что делает код универсальным. При всем этом синтаксис кода остаётся неизменным независимо от того какой источник данных мы используем. Т. о., синтаксис запроса, к примеру к обычному массиву, ничем не отличается от синтаксиса запроса к базе данных. По сути LINQ представляет собой язык в другом языке программирования.
Запрос указывает, какую информацию нужно извлечь из источника или источника данных. При необходимости запрос указывает способ сортировки, группировки и формирования этих сведений перед возвращением. Запрос храниться в переменной запроса и инициализируется выражением запроса.
Основные операции, выполняемые в запросе LINQ Получение источника данных Фильтрация Упорядочивание Группировка Соединение Выбор ( проецирование )
Источники данных LINQ Linq ориентирован на запросы, возвращаемые набор объектов, единственный объект или подмножество полей из объекта или множества объектов.
Последовательность (sequence) Возвращённый набор объектов называется последовательностью. Большинство последовательностей имеет тип IEnumerable, где T – тип данных объектов, находящихся в последовательности. Пример – последовательность целых чисел хранятся в переменной типа IEnumerable
Всего существует пять источников данных LINQ: LINQ to Object LINQ to XML LINQ to DataSet LINQ to SQL LINQ to Entities
LINQ to Qbject позволяет выполнять запросы к массивам и находящимся в памяти коллекциям данных. Имеет SQL- подобный синтаксис, доступный в LINQ- запросах. Стандартные операции запросов – это статические методы класса System.Linq.Enumerable
LINQ to Qbject Все операции запроса LINQ состоят из трёх различных действий : получение источника данных, создание запроса, выполнение запроса.
LINQ to XML предназначен для работы с XML- документами. Используя LINQ to XML можно сократить объёмы кода. Это программный интерфейс XML, который позволяет работать с XML- файлами внутри языков программирования
LINQ to DataSet широкие оптимизированные возможности создания запросов и модификацию приложений через объект DataSet
LINQ to SQL позволяет через запросы LINQ работать с базой данных MS SQL Server. Данная технология позволяет непосредственно запрашивать схемы баз данных MS SQL Server.
LINQ to Entities позволяет приложениям взаимодействовать с реляционными данными из баз данных как с объектами
Передача данных в объекты памяти часто бывает сложной и способствует появлению ошибок. Поставщик Linq, реализованный в Linq to DataSet и Linq to SQL преобразует исходные данные в данные, основанные на коллекции объектов, реализующих интерфейс Ienumerable.
Linq to Object - пример Пример запрос к коллекции Dictionary : Описание переменной models: private Dictionary models; Заполнение данными: private void InitializeData() {models = new Dictionary (); models.Add(1, "Алгоритмы"); … }
Запрос к массиву данных listBox1.Items.Clear(); var items = from s in names where s.StartsWith(tbFilter.Text) select s; foreach (var item in items) { listBox1.Items.Add(item); }
Запрос к данным в операторе foreach: var items = from s in names where s.StartsWith(tbFilter.Text) select s;
Способ получения результата выполнения запроса без цикла var items = from s in models where s.Value.Contains(tbFilter.Text) select s; listBox1. DataSource = items.ToList();
LINQ to XML - пример Описание переменных : private const string Root = "DocumentElement"; private const string FileName = "D:\\tmp.xml"; - название файла для сохранения XML-дерева private XElement xmlDoc; - экземпляр XML-дерева private XNamespace ns = " - пространство имён XML-дерева
Формирование XML- документа xmlDoc = new XElement(ns + Root, new XElement(ns + "Продукт", new XElement(ns + "Номер", 1), new XElement(ns + "Название", "Хлеб ржаной"), new XElement(ns + "Изготовитель", "ООО Хохлов"), new XElement(ns + "Дата_изготовления", new DateTime(2013, 06, 20)), new XElement(ns + "Годен_до", new DateTime(2013, 06, 24))), new XElement(ns + "Продукт", new XElement(ns + "Номер", 2), new XElement(ns + "Название", "Хлеб пшеничный"), new XElement(ns + "Изготовитель", "ООО Хохлов"), new XElement(ns + "Дата_изготовления", new DateTime(2013, 06, 24)), new XElement(ns + "Годен_до", null) … ));
Linq to DataSet запрос к данным, который вернёт список студентов, получивших оценку 5
private void bFilter_Click(object sender, EventArgs e) { xmlDoc = new XElement(ns + Root, from item in xmlDoc.Elements() where (item.Element(ns + "Годен_до").IsEmpty) select item); xmlDoc.Save(FileName); webBrowser1.Navigate(FileName); }
Linq to SQL Добавляем класс DataPTK.dbml Linq to SQL Classes
Диаграмма классов
Кроме классов, представляющих собой объекты из базы данных, сгенерирован класс DataPTKDataContext: который представляет собой класс Linq to SQL, который действует как посредник между базой данных SQL Server и классами сущностей Linq to SQL, сопоставленных этой базе данных. Класс DataContext содержит данные строки соединения и методы для подключения к базе данных и работы с данными в базе данных
Классы, представляющие объекты базы данных, также позволяют расширение класс Student.cs
Linq to Entities Платформа ADO.NET позволяет создавать приложения для доступа к данным, работающие с концептуальной моделью приложения. Entity Framework представляет логическую структуру базы данных, состоящую из слоёв : Концептуальный слой Слой сопоставления Логический слой
Работа с данными в Entity При создании приложений на платформе Entity Framework в программном коде предоставляется возможность работать с данными, представленными в форме объектов и свойств, без необходимого прямого обращения к таблицам и столбцам реляционной базы данных.
Платформа Entity Framework компилирует набор концептуальных схем и схем хранения вместе с заданными для них сопоставлениями. Клиентские представления – пары инструкций Entity SQL управляют обработкой запросов и обновлений в среды выполнения.
Платформа Entity Framework строится из поставщиков данных ADO.NET, специфичных для типа хранилища данных, например SQL Server. Базовому поставщику данных и реляционной базе данных передаётся объект EntityConnection.
Во время выполнения запрос проходит синтаксический анализ и преобразуется в каноническое дерево команд, которое является представлением запроса в модели объектов. Канонические деревья команд представляют операции выбора, обновления, вставки и удаления. Вся дальнейшая обработка выполняется над деревом команд, которое является средством взаимодействия между поставщиком System.Data.EntityClient и базовым поставщиком данных.Net Framework, например System.Data.SqlClient
Entity Data Model Спецификация – сущностная модель данных EDM. Схема макета применяется для создания программируемых классов, используемых кодом приложения. Схема хранилища – содержит материализующие данные для приложений.