使用 LINQ to SharePoint

上次修改时间: 2010年5月6日

适用范围: SharePoint Foundation 2010

本文概述了 LINQ to SharePoint 提供程序,它允许您在 Microsoft SharePoint Foundation 解决方案中使用应用语言集成查询 (LINQ) 技术的查询。该提供程序还允许使用乐观并发来更改数据。LINQ to SharePoint 也支持对象更改跟踪和冲突解决。

LINQ 与 LINQ 提供程序

LINQ 是编程语言 C# 和 Microsoft Visual Basic .NET 的一个功能。编译器是 Visual Studio 附带的。

LINQ 将类似 SQL 的语法和词汇添加到每种语言,它们可用于查询数据源。但有别于其他具有不同数据源类型的语言和查询语法的是,原则上,LINQ 可用于查询任何数据源,无论它是什么。由于这个原因,开发人员可能会发现这正是他们需要了解的唯一查询语法。

若要能够使用 LINQ 访问数据源,需要做的就是为该数据源创建 LINQ 提供程序。LINQ 提供程序是 Microsoft .NET Framework (System.Core.dll) 附带的 System.Linq.IQueryable<T>System.Linq.IQueryProvider 接口的一种实现。实现类必须在托管代码程序集中是公开的。实现 IQueryProvider 的类的主要工作是将 LINQ 查询转换为数据源的语言,如 SQL 或 XQuery,然后调用数据源的应用程序执行查询。

提供程序还必须公开网关类,其实例可与数据源通信,并输出 IEnumerable<T> 对象。例如,LINQ to SQL(该链接可能指向英文页面) 的网关类为 DataContextLINQ to XML(该链接可能指向英文页面) 的网关类为 XDocument。网关类必须实现 System.Linq.IQueryable<T> 或者具有能完成此功能的子属性,或者具有能返回一个类型的方法,该类型实现 System.Linq.IQueryable<T>。例如,DataContext 具有 GetTable() 方法,该方法返回实现 System.Linq.IQueryable<T>Table<TEntity> 类型。后面的接口又具有类型为 IQueryProvider 的属性。(网关类还可以直接实现 IQueryProvider。)它是所查询的类型为 Table<TEntity> 的对象。

在许多情况下,LINQ 提供程序不能被 .NET 解决方案开发人员使用,除非开发人员创建一组实体类来表示数据源中的附属实体,如特定 SQL 数据库的特定表。常见的情况是,必须创建许多这样的类(例如,有三十六个表的数据库),这样 LINQ 提供程序的开发人员通常将在其中包括代码生成工具,以便自动完成创建这些实体类的过程。

了解 LINQ

在使用 SharePoint to LINQ 提供程序之前,开发人员应大致了解 LINQ、如何将其用于 LINQ to SQL 提供程序,以及 .NET Framework 附带的特殊 LINQ to Objects(该链接可能指向英文页面) 提供程序。

Microsoft Developer Network (MSDN) 提供了大量信息,包括关于 LINQ 以及关于 .NET Framework 中内置的提供程序的一些视频。您也可以找到关于此主题的许多书。

LINQ to SharePoint 提供程序

LINQ to SharePoint 提供程序是在 Microsoft.SharePoint.Linq 命名空间中定义的。它将 LINQ 查询转换为协作应用程序标记语言 (CAML) 查询。开发人员无需再了解如何编写 CAML 查询。LINQ 查询可在服务器代码中使用。若要从客户端应用程序中查询,请使用 SharePoint 对 ADO.NET Data Services 的支持

LINQ to SharePoint 提供程序的网关类是 Microsoft.SharePoint.Linq.DataContext,它表示 SharePoint Foundation 网站的数据。它的使用和功能与 LINQ to SQL 提供程序中的 System.Data.Linq.DataContext 类是并行的。就像后一个类具有 GetTable() 方法一样(该方法返回实现 System.Linq.IQueryable<T>Table<TEntity> 对象,因此,Microsoft.SharePoint.Linq.DataContext 类也具有 GetList<T> 方法,该方法返回实现 System.Linq.IQueryable<T>EntityList<TEntity> 类。它是所查询的类型为 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 to XML(该链接可能指向英文页面)