Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 20:21:13
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

LINQ


Перейти к обзору всех тем

Краткое описание технологии LINQ

Технология LINQ (Language Integrated Query) - это попытка компании Microsoft скрестить традиционное процедурное программирование и декларативное или функциональное программирование. Проект LINQ – это попытка по новому взглянуть на прикладное программирование, и доказать, что общаться с вычислительной машиной можно одновременно на различных диалектах. Язык LINQ – это язык структурированных запросов, интегрированный в контекст привычных всем циклов, условных операторов и процедур. Если SQL – это язык структурированных запросов к реляционной базе данных, то LINQ – это язык структурированных запросов к любым массивам и коллекциям объектов, управляемых вашей программой. LINQ – это не реализация SQL в контексте C# или Visual Basic, а перенос его концепций на любые данные, с которыми имеет дело ваш программный код.

Исходные данные для запросов

В этом разделе будет кратко рассмотрен синтаксис LINQ в окружении программы, написанной на C#. Всего будет приведено 5 примеров, каждый из которых демонстрирует реализацию одного SQL запроса из компьютерного курса SQL 25 средствами языка LINQ. Для того чтобы аналогия была более полной, я экспортировал данные обучающей программы SQL 25 в XML и именно к этим данным буду адресовать свои запросы на LINQ. Результаты LINQ запросов должны полностью соответствовать результатам соответствующих SQL запросов.

Таблица D_STAFF в формате XML:

<dataroot>
<D_STAFF>
<XD_IID>1</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Семенов Сергей Павлович</S_NAME>
<S_POSITION>1</S_POSITION>
<S_EXPERIENCE>5</S_EXPERIENCE>
<S_CHIEF_ID>0</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>2</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Петренко Семен Владимирович</S_NAME>
<S_POSITION>2</S_POSITION>
<S_EXPERIENCE>5</S_EXPERIENCE>
<S_CHIEF_ID>1</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>3</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Васильев Геннадий Станиславович</S_NAME>
<S_POSITION>3</S_POSITION>
<S_EXPERIENCE>3</S_EXPERIENCE>
<S_CHIEF_ID>1</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>4</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Николаева Тамара Витальевна</S_NAME>
<S_POSITION>4</S_POSITION>
<S_EXPERIENCE>12</S_EXPERIENCE>
<S_CHIEF_ID>2</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>5</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Мартынов Степан Яковлевич</S_NAME>
<S_POSITION>11</S_POSITION>
<S_EXPERIENCE>2</S_EXPERIENCE>
<S_CHIEF_ID>2</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>6</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Рыжкова Татьяна Ивановна</S_NAME>
<S_POSITION>12</S_POSITION>
<S_EXPERIENCE>7</S_EXPERIENCE>
<S_CHIEF_ID>2</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>7</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Филатов Андрей Владимирович</S_NAME>
<S_POSITION>13</S_POSITION>
<S_EXPERIENCE>3</S_EXPERIENCE>
<S_CHIEF_ID>3</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>8</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Смирнов Валерий Степанович</S_NAME>
<S_POSITION>15</S_POSITION>
<S_EXPERIENCE>7</S_EXPERIENCE>
<S_CHIEF_ID>1</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>9</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Сурков Станислав Анатольевич</S_NAME>
<S_POSITION>14</S_POSITION>
<S_EXPERIENCE>8</S_EXPERIENCE>
<S_CHIEF_ID>1</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>10</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Крылова Анастасия Андреевна</S_NAME>
<S_POSITION>21</S_POSITION>
<S_EXPERIENCE>2</S_EXPERIENCE>
<S_CHIEF_ID>4</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>11</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Карпов Алексей Михайлович</S_NAME>
<S_POSITION>22</S_POSITION>
<S_EXPERIENCE>6</S_EXPERIENCE>
<S_CHIEF_ID>7</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>12</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Михайлова Виолетта Константиновна</S_NAME>
<S_POSITION>23</S_POSITION>
<S_EXPERIENCE>3</S_EXPERIENCE>
<S_CHIEF_ID>11</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>13</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Баранов Александр Рудольфович</S_NAME>
<S_POSITION>22</S_POSITION>
<S_EXPERIENCE>4</S_EXPERIENCE>
<S_CHIEF_ID>8</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>14</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Синицын Вадим Владленович</S_NAME>
<S_POSITION>22</S_POSITION>
<S_EXPERIENCE>3</S_EXPERIENCE>
<S_CHIEF_ID>9</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>15</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Куницына Тамара Федеровна</S_NAME>
<S_POSITION>24</S_POSITION>
<S_EXPERIENCE>1</S_EXPERIENCE>
<S_CHIEF_ID>8</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>16</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Степанов Кирилл Иванович</S_NAME>
<S_POSITION>23</S_POSITION>
<S_EXPERIENCE>2</S_EXPERIENCE>
<S_CHIEF_ID>13</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>17</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Варламов Дмитрий Федерович</S_NAME>
<S_POSITION>23</S_POSITION>
<S_EXPERIENCE>3</S_EXPERIENCE>
<S_CHIEF_ID>13</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>18</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Пирогова Елена Юрьевна</S_NAME>
<S_POSITION>24</S_POSITION>
<S_EXPERIENCE>2</S_EXPERIENCE>
<S_CHIEF_ID>9</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>19</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Волкова Лариса Петровна</S_NAME>
<S_POSITION>23</S_POSITION>
<S_EXPERIENCE>2</S_EXPERIENCE>
<S_CHIEF_ID>11</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
<D_STAFF>
<XD_IID>20</XD_IID>
<XD_OID>1</XD_OID>
<S_NAME>Семенов Петр Валентинович</S_NAME>
<S_POSITION>23</S_POSITION>
<S_EXPERIENCE>2</S_EXPERIENCE>
<S_CHIEF_ID>11</S_CHIEF_ID>
<S_COMMENTS></S_COMMENTS>
</D_STAFF>
</dataroot>

Таблица D_STAFF_PROFILE в формате XML:

<dataroot>
<D_STAFF_PROFILE>
<XD_IID>36</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>1</STAFF_ID>
<PROFILE_ID>22</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>37</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>1</STAFF_ID>
<PROFILE_ID>26</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>38</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>1</STAFF_ID>
<PROFILE_ID>30</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>39</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>1</STAFF_ID>
<PROFILE_ID>24</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>40</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>1</STAFF_ID>
<PROFILE_ID>28</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>41</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>1</STAFF_ID>
<PROFILE_ID>34</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>42</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>2</STAFF_ID>
<PROFILE_ID>22</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>43</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>2</STAFF_ID>
<PROFILE_ID>30</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>44</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>2</STAFF_ID>
<PROFILE_ID>28</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>45</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>2</STAFF_ID>
<PROFILE_ID>26</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>46</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>3</STAFF_ID>
<PROFILE_ID>30</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>48</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>4</STAFF_ID>
<PROFILE_ID>21</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>49</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>4</STAFF_ID>
<PROFILE_ID>32</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>50</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>5</STAFF_ID>
<PROFILE_ID>22</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>51</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>5</STAFF_ID>
<PROFILE_ID>26</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>52</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>5</STAFF_ID>
<PROFILE_ID>28</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>53</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>6</STAFF_ID>
<PROFILE_ID>30</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>54</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>6</STAFF_ID>
<PROFILE_ID>28</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>56</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>3</STAFF_ID>
<PROFILE_ID>57</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>59</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>1</STAFF_ID>
<PROFILE_ID>57</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>60</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>7</STAFF_ID>
<PROFILE_ID>30</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>61</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>8</STAFF_ID>
<PROFILE_ID>34</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>64</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>9</STAFF_ID>
<PROFILE_ID>24</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>65</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>10</STAFF_ID>
<PROFILE_ID>23</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>66</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>10</STAFF_ID>
<PROFILE_ID>33</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>69</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>13</STAFF_ID>
<PROFILE_ID>27</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>70</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>13</STAFF_ID>
<PROFILE_ID>35</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>71</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>8</STAFF_ID>
<PROFILE_ID>26</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>72</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>14</STAFF_ID>
<PROFILE_ID>25</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>73</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>15</STAFF_ID>
<PROFILE_ID>27</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>74</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>18</STAFF_ID>
<PROFILE_ID>25</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>76</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>0</STAFF_ID>
<PROFILE_ID>75</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>77</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>0</STAFF_ID>
<PROFILE_ID>29</PROFILE_ID>
</D_STAFF_PROFILE>
<D_STAFF_PROFILE>
<XD_IID>999</XD_IID>
<XD_OID>3</XD_OID>
<STAFF_ID>7</STAFF_ID>
<PROFILE_ID>75</PROFILE_ID>
</D_STAFF_PROFILE>
</dataroot>

Описание примеров

Все примеры скомпонованы в одной программе, написанной на C#, исходный код и результаты работы которой приведены ниже. Синтаксис LINQ очень похож на синтаксис SQL, хотя порядок ключевых слов (from, where,orderby, select) в структуре запроса иной. Глядя на исходный код, я надеюсь, многие вопросы снимутся сами собой. Итак, описание примеров:

  1. На основе данных, загруженных из файла D_STAFF.XML будет сформирована коллекция объектов CStaffItem. Делается это для того, чтобы показать, что LINQ может работать не только непосредственно с XML, в определенной мере заменяя собой XPath, но и с коллекцией объектов произвольного типа. В процедуре Query1 в самом ее начале формируется список объектов CStaffItem на базе универсального класса List<T>, а потом уже к этой коллекции адресуется LINQ запрос. Запрос полностью соответствует SQL запросу, описанному на 3-м шаге курса SQL 25.
    SQL:

    SELECT S_NAME, S_EXPERIENCE, S_POSITION FROM D_STAFF WHERE (D_STAFF.S_POSITION <10 OR D_STAFF.S_POSITION >20) 
    AND D_STAFF.S_EXPERIENCE <5

    Перейти к просмотру исходного кода.

  2. В этом примере рассматривается тот же самый запрос, но адресуемый непосредственно к объектной модели XML документа, формируемой экземпляром класса XDocument. Пространство имен System.Xml.Linq содержит специальные классы для работы с XML средствами LINQ. Это классы XDocument, XElement, XAttribute и другие. Их я и буду использовать во всех последующих примерах. Классы из пространства имен System.Xml, такие как XmlDocument, XmlElement и XmlAttribute для этой цели не подходят.

    Перейти к просмотру исходного кода.

  3. Простая сортировка данных средствами LINQ на примере SQL запроса, описанного на 8-м шаге курса изучения SQL. В этом и последующих примерах я буду использовать анонимные типы для определения переменных, хранящих результаты запроса. Использованием переменных анонимных типов в контексте LINQ запросов является обычной практикой программирования на C#. Объявление переменной анонимного типа выполняется с использованием ключевого слова var.
    SQL:

    SELECT S_NAME, S_EXPERIENCE FROM D_STAFF WHERE S_EXPERIENCE < 5 ORDER BY S_NAME

    Перейти к просмотру исходного кода.

  4. Сортировка по двум полям с использованием разных режимов сортировки: по возрастанию и по убыванию. Запрос соответствует SQL запросу 9-го шага SQL 25.
    SQL:

    SELECT S_EXPERIENCE, S_NAME FROM D_STAFF ORDER BY S_EXPERIENCE DESC, S_NAME ASC

    Перейти к просмотру исходного кода.

  5. Объединение данных из двух таблиц. За основу взят SQL запрос, рассматриваемый на 10-м шаге курса изучения SQL. Этот пример здесь для того, чтобы показать, что средствами LINQ также можно объединять данные из разных коллекций объектов разного типа, формируя при этом список объектов нового типа. В приводимом примере для формирования списка результатов используются анонимные типы, но никто не мешает создавать экземпляры конкретных, описанных ранее программистом классов. Например, конструкцию создания экземпляра анонимного типа new {…} можно заменить конструкцией new MyQueryResult(…).
    SQL:

    SELECT D_STAFF.S_NAME, D_STAFF.S_EXPERIENCE, D_STAFF_PROFILE.PROFILE_ID FROM D_STAFF INNER JOIN D_STAFF_PROFILE 
    ON D_STAFF_PROFILE.STAFF_ID=D_STAFF.XD_IID ORDER BY D_STAFF.S_EXPERIENCE DESC

    Перейти к просмотру исходного кода.

Исходный код LINQ запросов

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;

namespace LINQ_XML
{
    class Program
    {
        static void Main(string[] args)
        {
            Query1();
            Query2();
            Query3();
            Query4();
            Query5();
        }

        //Вспомогательный класс для хранения записей из таблицы D_STAFF
        public class CStaffItem
        {
            public CStaffItem(string name, int expirience, int position) 
                               { this.Name = name; 
                                 this.Expirience = expirience;
                                 this.Position = position;
                               }

            public string Name;
            public int Expirience;
            public int Position;
        }

        //Простой LINQ запрос к коллекции объектов произвольного типа
        static void Query1()
        {
            //Загрузка данных таблицы D_STAFF
            XmlDocument D_STAFF = new XmlDocument();
            D_STAFF.Load("D_STAFF.xml");

            //Формирование исходной коллекции объектов CStaffItem
            List<CStaffItem> items = new List<CStaffItem>();
            foreach (XmlNode xmlitem in D_STAFF.SelectNodes("//D_STAFF"))
                items.Add(new CStaffItem(
                          xmlitem.SelectSingleNode("S_NAME").InnerText,
                          System.Convert.ToInt32(xmlitem.SelectSingleNode("S_EXPERIENCE").InnerText),
                          System.Convert.ToInt32(xmlitem.SelectSingleNode("S_POSITION").InnerText)
                          ));

            //Выполнение LINQ запроса
            IEnumerable<CStaffItem> selecteditems = from item in items
                        where (item.Position < 10 || item.Position > 20 ) && item.Expirience < 5
                        select item;

            //Вывод результата запроса
            Console.WriteLine("Результат запроса 1:");  
            foreach (CStaffItem item in selecteditems)
                Console.WriteLine("{0}: стаж = {1} лет; позиция = {2}", 
                                  item.Name, item.Expirience, item.Position);

            Console.ReadKey();  
        }
Результат работы LINQ запроса Query1
        //Простой LINQ запрос к элементам XML документа
        static void Query2()
        {
            //Загрузка данных таблицы D_STAFF
            XDocument D_STAFF = XDocument.Load("D_STAFF.xml");

            //Выполнение LINQ запроса
            IEnumerable<XElement> items = from item in D_STAFF.Descendants("D_STAFF")
                        where (System.Convert.ToInt32(item.Element("S_POSITION").Value) < 10
                               || System.Convert.ToInt32(item.Element("S_POSITION").Value) > 20
                              ) && System.Convert.ToInt32(item.Element("S_EXPERIENCE").Value) < 5
                        select item;

            //Вывод результата запроса
            Console.WriteLine("Результат запроса 2:");
            foreach (XElement item in items)
                Console.WriteLine(item);

            Console.ReadKey();
        }
        //LINQ запрос с фильтром и сортировкой
        static void Query3()
        {
            //Загрузка данных таблицы D_STAFF
            XDocument D_STAFF = XDocument.Load("D_STAFF.xml");

            //Выполнение LINQ запроса
            var items = from item in D_STAFF.Descendants("D_STAFF")
                        where System.Convert.ToInt32(item.Element("S_EXPERIENCE").Value) < 5
                        orderby item.Element("S_NAME").Value 
                        select new { Name = item.Element("S_NAME").Value,
                                     Experience = item.Element("S_EXPERIENCE").Value 
                                   };

            //Вывод результата запроса
            Console.WriteLine("Результат запроса 3:");
            foreach (var item in items)
                Console.WriteLine(item);

            Console.ReadKey();
        }
Результат работы LINQ запроса Query3
        //LINQ запрос со сложной сортировкой
        static void Query4()
        {
            //Загрузка данных таблицы D_STAFF
            XDocument D_STAFF = XDocument.Load("D_STAFF.xml");

            //Выполнение LINQ запроса
            var items = from item in D_STAFF.Descendants("D_STAFF")
                        orderby System.Convert.ToInt32(item.Element("S_EXPERIENCE").Value) descending, 
                                item.Element("S_NAME").Value ascending
                        select new
                        {
                            Name = item.Element("S_NAME").Value,
                            Experience = item.Element("S_EXPERIENCE").Value
                        };

            //Вывод результата запроса
            Console.WriteLine("Результат запроса 4:");
            foreach (var item in items)
                Console.WriteLine(item);

            Console.ReadKey();
        }
Результат работы LINQ запроса Query4
        //LINQ запрос с объединением данных
        static void Query5()
        {
            //Загрузка данных таблицы D_STAFF
            XDocument D_STAFF = XDocument.Load("D_STAFF.xml");

            //Загрузка данных таблицы D_STAFF
            XDocument D_STAFF_PROFILE = XDocument.Load("D_STAFF_PROFILE.xml");

            //Выполнение LINQ запроса
            var items = from staff in D_STAFF.Descendants("D_STAFF")
                        join staff_profile in D_STAFF_PROFILE.Descendants("D_STAFF_PROFILE")
                        on staff.Element("XD_IID").Value equals staff_profile.Element("STAFF_ID").Value
                        orderby System.Convert.ToInt32(staff.Element("S_EXPERIENCE").Value) descending 
                        select new
                        {
                            Name = staff.Element("S_NAME").Value,
                            Experience = staff.Element("S_EXPERIENCE").Value,
                            ProfileID = staff_profile.Element("PROFILE_ID").Value
                        };

            //Вывод результата запроса
            Console.WriteLine("Результат запроса 5:");
            foreach (var item in items)
                Console.WriteLine(item);

            Console.ReadKey();
        }
    }
}
Результат работы LINQ запроса Query5


Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.