Блог Сергея Байдачного

Мой блог о технологиях

SharePoint 2010: Что нового? (часть 5) – Использование LINQ

3 комментария

Если Вы разрабатывали хотя бы одну простую веб-часть для SharePoint, то наверняка сталкивались с проблемой доступа к данным в списках. Чтобы выбрать данные из списка, приходилось формировать запросы на специальном языке CAML, который, в свою очередь, был слабо документирован и плохо поддавался изучению. В свою очередь, в SharePoint 2010, возможности списков значительно расширены, а значит, усложнились CAML-запросы. Но не стоит пугаться, так как с расширением возможностей списков, разработчикам стал доступен и новый механизм по выбору данных из списков – LINQ (Language Integrated Query).

Если Вы еще не сталкивались с LINQ, то, в двух словах, можно сказать, что LINQ представляет собой специальный механизм доступа к данным в любом хранилище. Данный механизм позволяет создавать запросы на языке, более приемлемом для C# или VB.NET программистов (С# и VB.NET соответственно), чем «родной» язык хранилища.

Работа LINQ технологии обеспечивается специальными провайдерами, которые преобразуют запросы на C# или VB.NET, в запросы на «родном» языке. В теории, этих провайдеров может быть любое количество, но на практике, существовало только три провайдера: LINQ to SQL, LINQ to XML, LINQ to Entity. Эти провайдеры обеспечивали доступ к данным в реляционных хранилищах, XML документах и динамических наборах объектов соответственно. SharePoint 2010 представляет новый провайдер – LINQ to SharePoint.

LINQ to SharePoint позволяет транслировать LINQ запросы в CAML, скрывая все детали от разработчика.

Чтобы использовать LINQ to SharePoint провайдер, Вам необходимо выполнить три шага:

· описать классы, объекты которых Вы будете использовать для хранения выбираемых данных;

· использовать DataContext класс из пространства имен Microsoft.SharePoint.Linq для получения ссылки на список, с которым Вы планируете работать;

· непосредственное использование LINQ для выбора данных из списка.

Рассмотрим последовательность описанных действий более детально.

Итак, первым делом необходимо описать классы, которые будут использоваться для работы с данными из списка. Эти классы должны включать:

· свойства, соответствующие колонкам списка, с которыми Вы собираетесь работать. Тут доступно 9 атрибутов, так каких как Association, Column, Choice, ContentType и др.;

· в зависимости от сложности колонок, могут понадобиться дополнительные типы: перечислимые типы или классы, описывающие списки, с которыми есть связки;

· необходимо предусмотреть механизм обновления данных: поведение при конкурентной работе.

Разработка такого набора классов может стать сложной задачей, а сами классы могут содержать ошибки. Поэтому, чтобы облегчить жизнь программисту, SharePoint 2010 поставляется вместе со специальной утилитой SPMetal. Утилита содержится в директории, подобной этой: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN, и позволяет генерировать необходимые классы автоматически.

Вот пример использования утилиты:

spmetal /web:http://sbaydach64

    /namespace:sharePoint_Linq /code:SharePoint_Linq.cs

В данном случае, утилита выбирает информацию обо всех списках на сайте http://sbaydach64 и генерирует код на C#, куда включает все классы, необходимые для работы с этими списками.

Все сгенерированные классы помечаются ключевым словом partial, поэтому, если Вы хотите добавить свой код, то можете это сделать в другом файле, не трогая сгенерированный код.

На следующем этапе, Вам необходимо создать экземпляр класса DataContext и получить ссылку на один из списков:

DataContext data = new DataContext(“http://sbaydach64”);
 
EntityList<Contact> Contacts = data.GetList<Contact>("Contacts");
 

Если Вы использовали утилиту SPMetal, могли заметить, что она генерирует также производный класс от DataContext. Вы можете использовать сгенерированный класс для облегчения доступа к списку.

Наконец, остается выбрать данные, сформировав необходимый запрос:

var myContacts = from contact in Contacts
                      where contact.City == "Dnepropetrovsk"
                      select contact;

Я всегда считал LINQ абсолютно бесполезной технологией. В первую очередь это обосновывалось тем, что LINQ «приучал» разработчиков писать запросы в коде (ведь LINQ to SQL применяют наиболее часто). На мой взгляд, это неправильно, так как данный код сложно поддерживать и оптимизировать. Но, кажется, в данном случае, использование LINQ вполне оправдано.

Между тем, Вы можете продолжать использовать CAML, который должен обеспечить максимальную производительность.

Замечание. Использовать LINQ to SharePoint можно лишь на серверной стороне. Несмотря на то, что Silverlight уже поддерживает базовую реализацию LINQ, клиентских библиотек для SharePoint нет.

Реклама

Written by Sergiy Baydachnyy

04.02.2010 в 09:19

Опубликовано в SharePoint

Tagged with

комментария 3

Subscribe to comments with RSS.

  1. […] Читать в моем блоге о технологиях Опубліковані Thursday, February 04, 2010 9:22 AM від Sergiy Baydachnyy […]

  2. Я всегда считал LINQ абсолютно бесполезной технологией.

    Это вы специально, потроллить решили? =)

    Flem

    04.02.2010 at 16:51

    • Я своих взглядов не скрываю. В воскресенье буду голосовать за Баррака Обаму — допишу ручкой.

      Sergiy Baydachnyy

      05.02.2010 at 07:49


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: