Використання LINQ в інших контекстах Visual C # (Sharp)

До цих пір всі приклади в цьому розділі демонстрували використання LINQ і обктов Але LINQ не є технологією, орієнтованої виключно на хвилювання операцій пошуку обєктів Його також можна застосовувати з мовою XML і реляційними базами даних Використання LINQ з цими іншими Істочному даних не є проблемою, тому що процес запитів є ідентичним Але проблемою є змусити запит працювати спочатку Розглянемо архектуру LINQ, показану на рис 151 (на основі ілюстрації в журналі MSDN Magazine, http://msdnmicrosoftcom/msdnmag/issues/07/06/csharp30/defaultaspx)

Як можна бачити, всі мови програмування NET можуть звертатися до бібліеке LINQ Дані, якими маніпулює бібліотека LINQ, поставляються іочніком даних, розрахованим для роботи з LINQ У прикладах, розглянутих досі, використовувався джерело даних LINQ – обєкти.

Але можна також використовувати підключення ADONET, розраховане для роботи з LINQ Хороша новина в тому, що LINQ можна використовувати з реляційними базами даних, а погана – що драйвер ADONET реляційної бази даних Доен підтримувати спеціальні характеристики LINQ На момент написання цих рядків LINQ підтримувався тільки драйвером сервера Microsoft SQL Server У нтоящее час драйвери для Microsoft Access, MySQL та інших реляційних баз даних не підтримують LINQ

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

Розглянемо наступний запит LINQ:

NorthwindDataContext northwind = new NorthwindDataContext() var products = from p in northwindProducts

where pOrderDetailsCount == 0 &amp&amp pUnitPrice &gt 100 select p

Зверніть увагу на виділений жирним шрифтом код в операторі from Іочніком даними є обєкт, який посилається на таблицю Products реліонной бази даних Якщо драйвер бази даних оптимізований під LINQ, то він зрозуміє цей запит LINQ і оптимізує його, начебто це був оператор SQL

Але якщо драйвер бази даних не підтримує LINQ, то тоді у нас є прлема, т к, теоретично, нам потрібно буде завантажити всі дані таблиці і тільки потім виконати запит LINQ Такий марнотратний до ресурсів підхід явно не рекомендується

Скажімо, що нам потрібно виконати запит LINQ з документом XML Розглянемо наступний код LINQ для XML (узятий з Web-сайту http://wwwhookedonIinqcom/ LINOtoXMI_5MinuteOverviewashx):

XDocument loaded = /DocumentLoad((ffl&quotC:\contactsxml&quot)

/ / Виконуємо запит даних і створюємо підмножина контактів var q = from з in loadedDescendants (contact)

where (int)cAttribute(&quotcontactld&quot) &lt 4

select (string) сElement (firstName) + + (String) сElement (lastName)

Зверніть увагу на використання такого ж синтаксису LINQ, як і в предущіх прикладах, але джерело даних, яким повинен маніпулювати LINQ, в даному випадку інший Майте на увазі, що при маніпулюванні даними з пощью LINQ ми маніпулюємо обєктами, які можуть вказувати на файли XML, реляційні бази даних або ж звичайнісінькі обєкти даних

Джерело: Гросс К С # 2008: Пер з англ – СПб: БХВ-Петербург, 2009 – 576 е: ил – (Самовчитель)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*