设为首页 收藏本站
查看: 734|回复: 0

[经验分享] Linq to SharePoint

[复制链接]

尚未签到

发表于 2015-9-25 08:33:29 | 显示全部楼层 |阅读模式


文章目录:
  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数据的一个趋势,等待微软能更加完善它。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118398-1-1.html 上篇帖子: SharePoint 2010开发工具图解系列:Visual Studio 2010 SharePoint Tool入门 下篇帖子: SharePoint 调查添加图片支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表