Главная » C# » Использование LINQ в других контекстах Visual C# (Sharp)

0

До сих пор все примеры в этой главе демонстрировали использование LINQ и обктов. Но LINQ не является технологией, ориентированной исключительно на волнение операций  поиска объектов.  Его также можно применять с языком  XML и реляционными базами данных. Использование LINQ с этими другими источнами данных не является проблемой, т. к. процесс запросов является идентичным. Но проблемой является заставить запрос работать изначально. Рассмотрим архектуру LINQ, показанную на рис. 15.1 (на основе иллюстрации в журнале MSDN Magazine, http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx).

Как можно видеть, все языки программирования .NET могут обращаться к библиеке LINQ. Данные, которыми манипулирует библиотека LINQ, поставляются иочником данных, рассчитанным для работы с LINQ. В примерах, рассмотренных до сих пор, использовался источник данных "LINQ — объекты".

Но можно также  использовать  подключение ADO.NET,  рассчитанное для  работы с LINQ. Хорошая новость в том, что LINQ можно использовать с реляционными базами данных, а плохая — что драйвер ADO.NET реляционной базы данных доен поддерживать специальные характеристики LINQ. На момент написания этих строк LINQ поддерживался только драйвером сервера Microsoft SQL Server. В нтоящее время драйверы для Microsoft Access, MySQL и других реляционных баз данных не поддерживают LINQ.

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

Рассмотрим следующий запрос LINQ:

NorthwindDataContext northwind = new NorthwindDataContext(); var products = from p in northwind.Products

where p.OrderDetails.Count == 0 && p.UnitPrice > 100 select p;

Обратите внимание на выделенный жирным шрифтом код в операторе from. Иочником данным является объект, который ссылается на таблицу Products релионной базы данных. Если драйвер базы данных оптимизирован под LINQ, то он поймет этот запрос LINQ и оптимизирует его, как будто бы это был оператор SQL.

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

Скажем, что нам нужно исполнить запрос LINQ с документом XML. Рассмотрим следующий код LINQ для XML (взят с Web-сайта http://www.hookedonIinq.com/ LINOtoXMI_5MinuteOverview.ashx):

XDocument loaded = /Document.Load((ffl"C:\contacts.xml");

// Выполняем запрос данных и создаем подмножество контактов var q = from с in loaded.Descendants("contact")

where (int)c.Attribute("contactld") < 4

select (string)с.Element("firstName") + "  " + (string)с.Element("lastName");

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

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии