使用 LINQ to SharePoint 访问 SharePoint 2010 列表数据

SharePoint 可视操作方法

**摘要:**了解如何使用 LINQ to SharePoint 以通过语言集成查询 (LINQ) 从 Microsoft SharePoint 2010 列表添加和读取项目。

上次修改时间: 2012年9月12日

适用范围: SharePoint Foundation 2010 | SharePoint Server 2010 | Visual Studio | Visual Studio 2008 | Visual Studio 2010

**供稿人:**Ted Pattison,Critical Path Training (Microsoft SharePoint MVP)

概述

使用 LINQ to SharePoint 提供程序是从 Microsoft SharePoint 2010 列表添加和读取项目的一种方法。此直观操作方法中描述的方法要求运行 SPMetal 实用工具来创建一个自定义数据上下文类和实体类。通过使用这些类,您可通过强类型方式访问 SharePoint 列表数据。

编码

若要使用 LINQ to SharePoint 提供程序访问 SharePoint 2010 列表中的数据,您必须使用一个名为 SPMetal 的命令行工具 (SPMetal.exe) 来生成实体类。在从命令提示符处运行 SPMetal 实体工具时,您必须传递三个参数:包含列表的网站的 URL、用于创建实体类的命名空间和输出文件的名称。(将整个命令输入为一个行。下面的示例中的换行符仅用于提高可读性。)

SPMETAL.EXE /web:http://intranet.wingtip.com 
            /namespace:WingtipIntranet 
            /code:WingtipIntranet.cs

使用 ASP.NET DataGrid 显示列表项

您可使用 Microsoft ASP.NET DataGrid 控件来显示从查询中返回的数据。如果您将 AutoGenerateColumns 属性设置为 true,则 DataGrid 控件会自动为结果集中的每个字段创建一个网格列。

<asp:DataGrid 
  ID="grdMain" 
  runat="server" 
  AutoGenerateColumns="true" />

由于数据上下文类表示一个连接,因此,必须使用目标网站的 URL 初始化该类。在创建数据上下文类的实例后,会将网站中的每个列表作为属性公开,这将允许您编写具有对列表列的强类型访问权的 LINQ 语句。通过使用此功能,您可以轻松执行对 SharePoint 列表的查询并将输出结果集绑定到 ASP.NET DataGrid 控件。

WingtipIntranetDataContext dc =
  new WingtipIntranetDataContext(SPContext.Current.Web.Url);

protected override void OnPreRender(EventArgs e) {

  var query = from DevelopersItem dev in dc.Developers
              where dev.SharePointDeveloper.Equals(true)
              orderby dev.Title, dev.FirstName
              select new {
                FirstName=dev.FirstName,
                LastName=dev.Title,
                SPDev=dev.SharePointDeveloper.ToString()
              };

  grdMain.DataSource = query;
  grdMain.DataBind();
}

添加新列表项

利用 SPMetal 所创建的数据上下文类和实体类,可轻松添加新列表项。SPMetal 为目标网站中的每个列表生成一个实体类。如果网站包含一个名为"Developers"的列表,则 SPMetal 将生成一个名为 DevelopersItem 的实体类,其中包含一组映射到列表列的属性。您只需创建并初始化实体类实例即可。然后,依次调用 SubmitChanges 方法和 InsertOnSubmit 方法。

protected void cmdAddDeveloper_Click(object sender, EventArgs e) {
  DevelopersItem newDev =
    new DevelopersItem {
      FirstName = txtFirstName.Text,
      Title = txtLastName.Text,
      SharePointDeveloper = chkSharePointDeveloper.Checked
  };

  dc.Developers.InsertOnSubmit(newDev);
  dc.SubmitChanges();
}
读取

SharePoint 2010 引入了一个名为 LINQ to SharePoint 的新 LINQ 提供程序,使您能够通过使用 LINQ 编程技术访问 SharePoint 列表数据。虽然使用 LINQ to SharePoint 提供程序是一种可选的方法,但与用于查询和更新列表项的旧技术(例如,使用 SharePoint 对象模型或 CAML 编程语言)相比,此方法具有多个优势:

  • LINQ to SharePoint 无需处理 CAML。

  • 您的代码具有对列表项的列的强类型访问权。

  • 当您用 C# 或 Microsoft Visual Basic 编写 LINQ 语句时,Microsoft Visual Studio 将基于列表列提供 IntelliSense 信息。

  • 与 CAML 中的查询相比,LINQ 中的查询更易于编写和理解。

若要使用 LINQ to SharePoint 提供程序,请按以下常规步骤进行操作:

  1. 对目标网站运行 SPMetal 以生成实体类。

  2. 在 Visual Studio 中,将 SPMetal 所生成的源文件添加到您的项目中。

  3. 添加对 Microsoft.SharePoint.Linq 的项目引用。

  4. 对生成的数据上下文类和实体类进行编程以读取和写入列表项。

观看

观看视频

观看视频(该链接可能指向英文页面) (00:20:01)

浏览

关于作者

Ted Pattison 是一位作者、讲师以及 Critical Path Training(该链接可能指向英文页面)(一家专门从事 SharePoint 技术培训的公司)的共同创立者。作为一名 Microsoft SharePoint 最有价值专家 (MVP),Ted 经常与 Microsoft 的 Developer Platform Evangelism 小组合作,以便在产品生命周期的 Alpha 和 Beta 阶段及早进行研究并为开发人员创作 SharePoint 培训材料。Ted 还在 MSDN Magazine 上撰写一个面向开发人员的专栏,名为 Office Space。