SharePoint 2010中的LINQ To SharePint

  LINQ to SharepointSharePoint 2010里对query的增强,它定义在Microsoft.SharePoint.LINQ命名空间中,让我们能够使用更加通用的LINQ来替代SharePoint 中传统的CAML查询,毕竟, CAML的查询语法并不能算做一种标准。不过,CAML查询在SharePoint 2010中仍然保留,很多内部的Web Part还是基于CAML查询来实现,实际上,LINQ to SharePoint最终还是转换成了CAML查询。

      LINQ to SharePoint GatewayMicrosoft.SharePoint.LINQ.DataContext,每一个Gateway代表了一个SharePoint站点,使用上与LINQ to SQL 中的System.Data.LINQ.DataContext类似,如果我们把SharePoint中的一个List比作SQL中的一个Table,这两种LINQ provider完全类似,比如LINQ to SQL中的GetTable返回一个实现了System.LINQ.IQueryableTable(TEntity),在LINQ to SharePoint中有对应的GetList,它返回的是一个实现相同接口的List(TEntity)。所以,如果你对LINQ to SQL非常熟悉,那LINQ to SharePoint可以拿来就用。

      然后,我将创建一个控制台应用程序来向大家介绍如何使用LINQ to SharePoint,我用的是Visual Studio RTM Ultimate版,请将项目的Target Framework修改为.Net Framework 3.5,把Platform Target修改为X64或者Any CPU

SharePoint 2010中的LINQ To SharePint

1.       添加引用

添加对Microsoft.SharePoint.LINQ.dll的引用,它在路径Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\下。

2.       生成LINQ to SharePoint Proxy类,通过它来访问SharePoint站点中的List

使用spmetal.exe工具,它能根据SharePoint站点中的List定义生成对应C#VB.Net类(默认C#,类似于使用WSDL.exeWeb Service生成Proxy类。它存放在路径Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\BIN下。关于它的详细介绍请参阅MSDNhttp://msdn.microsoft.com/en-us/library/ee538255(office.14).aspx

该命令的使用格式:spmetal /web:http://YourServerName /namespace:YourNameSpace /code:YourClassName

这是基本的参数,此外还有languageuserpassword等,不再一一介绍,请参阅MSDN

此外,code参数是你对应的CS代码文件的完整路径,如果仅仅是.CS代码文件名,默认存放在Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\BIN下。

这样生成的类包含了对应站点下所有结构的定义,比如ListImageDocument,以及ItemFolder等等,建议大家仔细看一下。

生成之后,将该文件附加到我们的控制台应用程序项目中。

3.       使用LINQ to SharePoint

 这样,我们就可以在应用程序中使用LINQ to SharePoint了,比如,我要查询站点中Contacts这个列表,条件是LastNameBush,只取FirstNameLastNameCompanyJobTitle四列。

            DataContext dc = new DataContext("SharePoint站点路径");

            EntityList<Contact> contacts = dc.GetList<Contact>("Contacts");

            var empQuery = from emp in contacts

                           where emp.LastName == "Bush"

                           select new { emp.FirstName, emp.LastName, emp.Company, emp.JobTitle };

 

            foreach (var u in conQuery)

                Console.WriteLine(u);   

         再比如,我要向Contacts列表中插入一条记录:

            DataContext data = new DataContext("SharePoint站点路径");

            EntityList<Contact> contacts = data.GetList<Contact>("Contacts");

            // Create the item to be added

            ContactsContact newContact = new ContactsContact

            {

                LastName = "Obama",

                FirstName = "Barack",

            };

            // Mark the item to be added on the next call of Submit

            contacts.InsertOnSubmit(newContact);        

            // Submit all changes

            data.SubmitChanges();

其他就不一一举例了,这就是SharePoint 2010中的LINQ to SharePoint,我们可以在WebPartControlApplication Page中使用它。

 

你可能感兴趣的:(SharePoint)