Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_ПАРАДИГМИ ПРОГРАМУВАННЯ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.32 Mб
Скачать

Лекція 12. Мова linq

План

1. Основи мови LINQ

2. Linq: узагальнення і інтерфейси

3. Основні операції запиту

4. Перетворення даних з linq

5. Зв'язки типів в операціях запиту

6. Синтаксис запиту або синтаксис методу

12.1. Основи мови linq

Language Integrated Query (LINQ) – проект Microsoft по додаванню синтаксису мови запитів, що нагадує SQL, в мови програмування платформи .NET Framework. LINQ випущений разом з Visual Studio 2008 в кінці листопада 2007 року.

LINQ (Language-Integrated Query) є набором функцій Visual Studio 2008, що розширюють потужні можливості запитів в синтаксисі мови C# і Visual Basic. LINQ представляє стандартні шаблони для створення запитів і оновлення даних; технологія може бути розширена для підтримки потенційно будь-якого типа сховища даних. Visual Studio 2008 включає різних постачальників LINQ, що дозволяють використовувати LINQ з колекціями платформи .NET Framework, базами даних SQL Server, наборами даних ADO.NET і XML-документами.

LINQ є набором розширень мови, що підтримує формування запитів даних способом, безпечним по типах. Запрошувані дані можуть бути представлені у формі XML (запити LINQ до XML), баз даних (ADO.NET з підтримкою LINQ, куди входять LINQ до SQL, LINQ до наборів даних і LINQ до екземплярів), об'єктів (LINQ до об'єктів) і так далі Архітектура LINQ показана на рис. 12.1.

Принцип LINQ полягає в тому, що всі елементи мови повинні виконувати одну і ту ж роботу незалежно від джерела даних. Проте, не дивлячись на те, що синтаксис працює зі всіма типами джерел даних, постачальник запиту, що пов'язує дані з самим джерелом даних, може реалізувати цю поведінку самими різними способами.

INCLUDEPICTURE "http://www.intuit.ru/department/internet/mwebtech/10/08_01.gif" \* MERGEFORMATINET

Рис. 12.1.  Архітектура LINQ

Розглянемо приклад інтегрованого запиту:

var contacts =

from c in customers

where c.City == "Москва"

select new { c.Name, c.Phone };

Тут з деякого джерела даних customers вибираються імена і телефони клієнтів, що проживають в місті Москві. Запит дуже схожий на мову SQL, проте використовує синтаксис, що строго типізується.

Цей же запит можна записати і в іншому вигляді – використовуючи лямбда-вирази і методи розширення (рис.12. 2). Саме до такого вигляду приведе код, наведений в прикладі вище, компілятор.

INCLUDEPICTURE "http://www.intuit.ru/department/internet/mwebtech/10/08_02.gif" \* MERGEFORMATINET

Рис. 12.2.  Два способи написання запиту LINQ на мові C# 3.0

LINQ пропонує узгоджену модель для роботи з даними в різних видах джерел даних і в різних форматах. У запиті LINQ робота завжди здійснюється з об'єктами. Для запитів і перетворень даних в XML-документах, базах даних SQL, наборах даних ADO.NET, колекціях .NET і будь-яких інших форматах, для яких доступний постачальник LINQ, використовуються однакові базові шаблони кодування.

Всі операції запиту LINQ складаються з трьох різних дій.

  1. визначення джерела даних;

  2. створення запиту;

  3. виконання запиту.

У наступному прикладі показано вираз цих трьох частин операції запиту у вихідному коді. У прикладі як джерело даних для зручності використовується масив цілих чисел; проте, ті ж принципи застосовні і до інших джерел даних.

class IntroToLINQ

{

static void Main()

{

// 1. Визначення джерела даних

int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// 2. Створення запиту

// numQuery – це IEnumerable<int>

var numQuery =

from num in numbers

where (num % 2) == 0

select num;

// 3. Виконання запиту

foreach (int num in numQuery)

{

Console.Write("{0,1} ", num);

}

}

}

Результатом виконання запиту буде вивід на консоль лише парних чисел.

На рис. 12.3 показана завершена операція запиту. У LINQ виконання запиту відрізняється від самого запиту; іншими словами, створення змінної запиту само по собі не пов'язане із отриманням даних.

INCLUDEPICTURE "http://www.intuit.ru/department/internet/mwebtech/10/08_03.gif" \* MERGEFORMATINET

Рис.12.3.  Операція запиту в LINQ

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]