Поделиться через


Использование LINQ to SharePoint

Дата последнего изменения: 6 мая 2010 г.

Применимо к: SharePoint Foundation 2010

В этой статье представлен обзор поставщика LINQ to SharePoint, который позволяет использовать запросы LINQ в решениях Microsoft SharePoint Foundation. Этот поставщик также предоставляет возможность изменять данные с использованием нежесткой блокировки. LINQ to SharePoint также поддерживает отслеживание изменения объектов и разрешение конфликтов.

LINQ и поставщики LINQ

LINQ — это компонент языков программирования C# и Microsoft Visual Basic .NET. Компиляторы включены в Visual Studio.

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

Все, что необходимо, чтобы сделать источник данных с помощью LINQ — это создать поставщика LINQ для источника данных. Поставщик LINQ — это реализация интерфейсов System.Linq.IQueryable<T> и System.Linq.IQueryProvider, которые включены в Microsoft .NET Framework (System.Core.dll). Реализующие классы должны быть открытыми и должны быть размещены в сборке управляемого кода. Основная задача класса, реализующего IQueryProvider, — переводить запросы LINQ на язык источника данных, такой как SQL или XQuery, а затем вызывать приложение источника данных для выполнения запроса.

Поставщик также должен предоставлять класс шлюза, экземпляры которого могут связываться с источником данных и выходными объектами IEnumerable<T>. Например, класс шлюза для LINQ to SQL (Возможно, на английском языке)DataContext, а класс шлюза для LINQ to XMLXDocument. Класс шлюза должен реализовать System.Linq.IQueryable<T> или содержать дочернее свойство, которое реализует его, или же содержать метод, который возвращает тип, реализующий System.Linq.IQueryable<T>. Например, DataContext содержит метод GetTable(), возвращающий тип Table<TEntity>, который реализует интерфейс System.Linq.IQueryable<T>. Этот интерфейс, в свою очередь, содержит свойство типа IQueryProvider. (Класс шлюза также напрямую реализует IQueryProvider.) Это запрашиваемые объекты типа Table<TEntity>.

Во многих случаях разработчик решения .NET не может использовать поставщик LINQ, если не создается набор классов сущностей, представляющих соответствующие сущности в источнике данных, такие как определенные таблицы определенной базы данных SQL. Зачастую нужно создать множество таких классов (например, если база данных содержит больше 30 таблиц), поэтому разработчик поставщика LINQ обычно включает средство генерации кода для автоматизации создания этих классов сущностей.

Сведения о LINQ

Перед работой с поставщиком SharePoint to LINQ Provider разработчики должны ознакомиться с основными сведениями о LINQ, его использовании с поставщиком LINQ to SQL и специальным поставщиком LINQ to Objects, которые включены в .NET Framework.

В библиотеке MSDN есть много полезной информации, в том числе некоторые видеоролики, о LINQ и поставщиках, встроенных в .NET Framework. Также существует множество книг по данной области.

Поставщик LINQ to SharePoint

Поставщик LINQ to SharePoint определен в пространстве имен Microsoft.SharePoint.Linq. Он переводит запросы LINQ в запросы Collaborative Application Markup Language (CAML). Теперь разработчикам больше не нужно знать, как писать запросы CAML. Запросы LINQ можно использовать и в коде сервера. Для запроса клиентского приложения используйте поддержку SharePoint для служб данных ADO.NET.

Класс шлюза для поставщика LINQ to SharePoint — Microsoft.SharePoint.Linq.DataContext, который представляет данные веб-сайта SharePoint Foundation. Он одновременно используется и является функцией для класса System.Data.Linq.DataContext в поставщике LINQ to SQL. Как и последний класс, который содержит метод GetTable(), возвращающий объект Table<TEntity>, который реализует System.Linq.IQueryable<T>, класс Microsoft.SharePoint.Linq.DataContext содержит метод GetList<T>, который возвращает класс EntityList<TEntity>, который реализует System.Linq.IQueryable<T>. Запрашиваются объекты типа EntityList<TEntity>.

Далее представлен пример использования запроса LINQ для SharePoint Foundation.

// Get DataContext from page context
DataContext data = new DataContext(SPContext.Current.Web.Url);

// Get the SharePoint list
EntityList<Customer> Customers = data.GetList<Customer>("Customers");

// Query for customers from London
var londonCustomers = from customer in Customers
                      where customer.City == "London"
                      select customer;

foreach (var londonCust in londonCustomers)
{
    Console.Writeline("id = {0}, City = {1}", 
                      londonCust.CustomerId, 
                      londonCust.City);
}

Дополнительные сведения о запросах поставщика LINQ to SharePoint см. в статье Практическое руководство. Выполнение запроса с помощью LINQ to SharePoint.

Далее представлен пример использования LINQ для добавления элемента в список SharePoint Foundation.

// Get DataContext from page context
DataContext data = new DataContext(SPContext.Current.Web.Url);

// Get the SharePoint list
EntityList<Customer> Customers = data.GetList<Customer>("Customers");

// Create the item to be added
Customer newCustomer = new Customer() { CustomerId=36, City=”Madrid” };

// Mark the item to be added on the next call of Submit
Customers.InsertOnSubmit(newCustomer);

// Submit all changes
data.SubmitChanges();

Дополнительные сведения о добавлении, изменении и удалении элементов списка с помощью поставщика LINQ to SharePoint см. в статье Практическое руководство. Запись в базы данных контента с помощью LINQ to SharePoint.

См. также

Ссылка

Microsoft.SharePoint.Linq.DataContext

EntityList<TEntity>

GetList<T>

IEnumerable<T>

System.Linq.IQueryable<T>

IQueryProvider

Microsoft.SharePoint.Linq

Другие ресурсы

LINQ to Objects

LINQ to SQL: .NET LINQ для реляционных данных (Возможно, на английском языке)

LINQ to XML