zoukankan      html  css  js  c++  java
  • Linq to SharePoint

     

    文章目录:

    Linq to SharePoint介绍

    Linq to SharePoint应用

    Linq to SharePoint使用总结

    SharePoint项目中经常会对列表、文档库、网站等进行操作,涉及到的类型包括Site\Web\List\ListItem\Folder等,SharePoint有其原始的查询方法Caml,缺点是查询语句复杂且不容易读懂,最重要的是Caml是用字符串或者GUID作为KEY来查询,在实际应用中很容易出错。针对SharePoint这一问题,微软引入了LINQ to SharePoint来进一步简化SharePoint中的查询、筛选。但事实上,LINQ to SharePoint在性能方面并不一定会优于直接使用caml查询,因为LINQ to SharePoint是将查询转换为caml语句,再进行查询,自然会有更大的系统开销。无论如何,这是微软主推的一项技术,有必要了解,在实际数据量不是很大的应用中,编程过程也会更简单一些。

    Linq to sharepoint介绍

     一、Linq to SharePoint

    首先Linq to SharePoint编程语言 C# 和 Microsoft Visual Basic .NET 的一个功能,编译器是 Visual Studio 附带的。

    Linq to SharePoint是LINQ家族中的一员,如果使用过例如Linq to SQL的话,就会发现Linq to SharePoint与其有很多相同之处。

    如Linq to SQL中有DataContext类,用来打开数据库连接并进行操作。Linq to SharePoint也有DataContext,同样用来对SharePoint中的数据进行操作。

    二、SPMetal

    使用Linq to SharePoint 很重要的一步是生成Entity类,也就是所说的SharePoint实体类,用来映射到SharePoint对应的文档库、列表等等。手动创建实体类,是一件很痛苦的事情,复杂且易错,幸好有SPMetal工具来自动生成。当然,这个工具也有一些限制,如自定义字段不会生成对应实体,文档库附件不会生成。如果有这样的需求,那只能使用扩展对象关系映射,这一点上本人也涉猎较浅,就不做赘述,还是直接使用微软提供的工具吧。接下来是SPMetal的使用方法:

    1、使用默认代码生成规则

    如果没有特殊要求,默认规则就可以满足程序的要求。

    步骤一、打开命令行CMD

    步骤二、cd到%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15(SharePoint 2010则替换为14)\BIN 

    步骤三、运行命令:SPMetal /web:http://yoursiteurl /code:c:\LinqDemo.cs

     还有一些其他的参数,可以设置生成代码的namespace、serializetion,可以参考MSDN文档

    2、使用参数XML文件改变默认值

    使用XML作为参数传递给SPMetal生成代码,是一种拓展方法,可以改变生成类的名称,指定List包含的列等。

    一般我们希望生成的实体类都是与真实SharePoint结构相同的,如相同的列表名,想用的列名。

    所以,如果没有特殊要求,可以不忽略此节。

    参数XML的结构是:

    <?xml version="1.0" encoding="utf-8"?>
    <Web AccessModifier="Internal" xmlns="http://schemas.microsoft.com/SharePoint/2009/spmetal">
      <ContentType Name="Contact" Class="Contact"> 
        <Column Name="ContId" Member="ContactId" />
        <Column Name="ContactName" Member="ContactName1" />
        <Column Name="Category" Member="Cat" Type="String"/>
        <ExcludeColumn Name="HomeTelephone" />
      </ContentType>
      <ExcludeContentType Name="Order"/>
      <List Name="Team Members" Type="TeamMember">
        <ContentType Name="Item" Class="TeamMember" />
      </List>
    </Web>
    Linq to sharepoint应用

    上面介绍了Linq to SharePoint的一些主要内容,下面是介绍如何使用Linq to SharePoint。

    一、使用SPMetal工具生成实体类声明

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     此代码由工具生成。
    //     运行时版本:4.0.30319.17929
    //
    //     对此文件的更改可能会导致不正确的行为,并且如果
    //     重新生成代码,这些更改将会丢失。
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    using System;
    
    
    
    public partial class SPefDataContext : Microsoft.SharePoint.Linq.DataContext {
        
        #region Extensibility Method Definitions
        partial void OnCreated();
        #endregion
        
        public SPefDataContext(string requestUrl) : 
                base(requestUrl) {
            this.OnCreated();
        }
        
        [Microsoft.SharePoint.Linq.ListAttribute(Name="PolicyGuide")]
        public Microsoft.SharePoint.Linq.EntityList<PolicyGuide> PolicyGuide {
            get {
                return this.GetList<PolicyGuide文档>("PolicyGuide");
            }
        }

    使用工具对指定网站生成实体类,生成如上代码。类型默认cs文件名+DataContext,属性PolicyGuide表示文档库PolicyGuide,Name属性是真实文档库名。
    二、使用Linq对文档库进行查询

    using (SPefDataContext SDataContext = new SPefDataContext(siteurl))
    {
                  var itemcol = (from policy in SDataContext.PolicyGuide
                  where 条件(例如:policy.Title!=null)
    select policy).Skip(num1).Take(num2).OrderBy(p => p.CreateTime); }

    上述代码只是一个简单的示例,首先新建DataContext类,这样就可以使用强类型的Linq to SharePoint了,Linq的语法大家应该都懂,Skip用来获取指定位置开始的数据,Take指定获取的数据数量,orderby指定排序规则。

    Linq to SharePoint允许建立列表之间的连接,但必须是有引用字段。  
    在这里要说明一下,Linq to Sharepoint会将所有SPlistItem都取出后,再进行筛选,这会造成一定的性能问题。所以要使用Take()方法,这样在生成的caml语句中,就会限定只获取一条数据。如果想要查看每次linq to SharePoint生成的Caml语句,可以通过Datacontext的Log属性获取。

    查看MSDN文档的时候发现其中有对Linq to SharePoint性能做出解释,有兴趣的可以查看该文档MSDN文档

    三、使用Linq to SharePoint文档修改

    using (SPefDataContext SDataContext = new SPefDataContext(siteurl))
     {
               var item = (from policy in SDataContext.PolicyGuide
                           where !String.IsNullOrEmpty(policy.id)
    select policy).Take(1).Single(); if (item != null) { item.Title="HasModified";
    }
           SDataContext.SubmitChanges();
    }

    首先从文档库中查找到需要修改的数据item,对item修改后,调用DataContext.SubmitChanges()方法,这样Linq to SharePoint就会对更改的项进行更新。

    四、提升权限

    在使用Linq to SharePoint操作数据时,当前用户可能不具有操作权限,这是可以参考SharePoint服务器端模型中的SPSecurity.RunWithElevatedPrivileges方法。

    这个大家应该都用过,也不属于本文的内容,只作为一个提示。

    Linq to sharepoint使用总结

    优缺点总结:

    1、Linq to SharePoint是强类型,易操作。

    2、Linq to SharePoint查询方便,不需要知道Caml怎么写。

    3、Linq to SharePoint不仅支持查询,还可以删除、修改。

    4、Linq to SharePoint会产生性能问题

    5、Linq to SharePoint对有些列表会有限制,如一些自定义的内容

    无论如何,Linq to SharePoint也会是操作SharePoint数据的一个趋势,等待微软能更加完善它。

  • 相关阅读:
    HDU 1010 Tempter of the Bone
    HDU 4421 Bit Magic(奇葩式解法)
    HDU 2614 Beat 深搜DFS
    HDU 1495 非常可乐 BFS 搜索
    Road to Cinema
    Sea Battle
    Interview with Oleg
    Spotlights
    Substring
    Dominating Patterns
  • 原文地址:https://www.cnblogs.com/renzh/p/3014445.html
Copyright © 2011-2022 走看看