SharePoint 服务器端对象模型 之 使用LINQ进行数据访问操作(Part 2)
(四)使用LINQ进行列表查询
在生成实体类之后,就可以利用LINQ的强大查询能力进行SharePoint列表数据的查询了。在传统SharePoint对象模型编程中,需要首先获取网站对象,再进行其他操作;使用LINQ也是类似,对数据的访问和操作都要先获取DataContext网站,之后再通过这个DataContext进行数据访问。
1、获取网站和列表
DataContext的创建同样也是要使用绝对路径进行构造,并使用GetList方法获取相应的列表。例如下面的代码获取Chapters列表中所有的章节信息:
1: using (DataContext ctx = new DataContext("http://sp2010/book"))
2: {
3: EntityList<Chapters项目> chapters =
4: ctx.GetList<Chapters项目>("Chapters");
5: foreach(Chapters项目 chp in chapters)
6: Console.WriteLine(chp.Name);
7: }
当然,我们也可以直接使用所生成的强类型的DataContext,并直接获取相应的列表,如下面的代码所示:
1: using (BookDataContext ctx =
2: new BookDataContext("http://sp2010/book"))
3: {
4: foreach(Chapters项目 chp in ctx.Chapters)
5: Console.WriteLine(chp.Name);
6: }
2、进行列表查询
使用LINQ,就可以方便快捷地进行列表查询,无需再编写复杂的CAML查询,下面的例子查找了在Chapters列表中,名称包含“数据”的章节信息:
1: using (BookDataContext ctx =
2: new BookDataContext("http://sp2010/book"))
3: {
4: var dataChapters = from chp in ctx.Chapters
5: where chp.Name.Contains("数据")
6: select chp;
7: foreach(var chp in dataChapters)
8: Console.WriteLine(chp.Name + ":" + chp.Writer);
9: }
由于在生成的实体类中,查阅项是通过相应的实体引用的方式实现的,在进行列表关联查询的时候就会变得异常方便。在之前介绍使用CAML进行列表关联查询的时候,我们曾经假设了一个“订单 – 销售 – 城市”的例子,仍以这个查询为例,通过下面的代码就可以便捷地查询到所有北京销售的订单信息:
1: using (DemoDataContext ctx =
2: new DemoDataContext("http://sp2010"))
3: {
4: var bjOrders = from order in ctx.Orders
5: where order.Saler.City.标题 == "北京"
6: select order;
7: foreach (var order in bjOrders)
8: {
9: Console.WriteLine(string.Format("{0}卖了{1}套{2}。",
10: order.Saler.标题, order.Amount, order.标题));
11: }
12: }
从这些例子我们可以看到,通过使用LINQ to SharePoint以及生成的数据实体类,在编写列表查询的时候可以更加直观、便捷,由于Visual Studio的智能感知和编译时检查,也不容易出现因失误所造成的代码运行错误。
3、查看查询过程中的CAML
由于LINQ to SharePoint会在底层根据列表的结构将查询转换成CAML形式的查询,因此使用LINQ to SharePoint在效率上比传统的CAML查询略低一些(经笔者测试,在小数据集上大约要慢10%至20%左右),主要消耗时间的部分在于将LINQ查询转换为CAML查询的过程,因此当数据量较大的时候,这个转换所带来的时间消耗相对就要小很多了。
出于效率考虑,或者出于学习CAML的目的,我们有时希望能够看到LINQ翻译成CAML之后的翻译结果。在DataContext中,也提供了这样的机制,我们可以通过Log属性观察到在LINQ查询的时候是使用怎样的CAML进行实际列表查询的,如下例所示:
1: using (BookDataContext ctx =
2: new BookDataContext("http://sp2010/book"))
3: {
4: StringBuilder builder = new StringBuilder;
5: StringWriter writer = new StringWriter(builder);
6: ctx.Log = writer;
7:
8: var dataChapters = from chp in ctx.Chapters
9: where chp.Name.Contains("数据")
10: select chp;
11: foreach(var chp in dataChapters)
12: Console.WriteLine(chp.Name + ":" + chp.Writer);
13:
14: // 输出查询过程中所实际使用的CAML:
15: writer.Flush();
16: Console.WriteLine(builder.ToString());
17: }
SharePoint 服务器端对象模型 之 使用LINQ进行数据访问操作(Part 2)的更多相关文章
- SharePoint服务器端对象模型 之 使用LINQ进行数据访问操作(Part 4)
(六)高效合理的使用LINQ 1.DataContext中的两个属性 为了能够使用DataContext进行数据提交,在DataContext进行数据查询和操作的过程中,内部会进行数据状态的保持和追踪 ...
- SharePoint服务器端对象模型 之 使用CAML进展数据查询
SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列 ...
- SharePoint服务器端对象模型 之 使用CAML进行数据查询
(一)概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列表条目的集合. 除去列表上的查询之外,在SharePoint中还大 ...
- SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 4)
(五)列表查询中的阈值限制 在之前版本的SharePoint 中,如果在查询的时候没有指定返回数目,那么SharePoint将会查找该列表中所有的条目,这可能会造成在SQL表中需要返回大量的条目,极大 ...
- SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 2)
(三)使用SPQuery进行列表查询 1.概述 列表查询主要是指在一个指定的列表(或文档库)中按照某些筛选.排序条件进行查询.列表查询主要使用SPQuery对象,以及SPList的GetItems方法 ...
- SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)
(四)使用SPSiteDataQuery进行多列表查询 1.概述 前面介绍的列表查询有很多优势,但是它的一个缺点就是一次只能在一个列表中进行查询,在SharePoint中,提供了一个跨网站.跨列表查询 ...
- SharePoint服务器端对象模型 完结
整个系列已完结,大概看了一眼,平均阅读量不到200.估计也没什么人看了,而且服务器端对象模型除了在某些企业开发中会用到,从2013时代开始其实已经不是SharePoint开发的最佳选择了.不过既然已经 ...
- SharePoint服务器端对象模型 之 序言
对于刚刚开始接触SharePoint的开发人员,即使之前有较为丰富的ASP.NET开发经验,在面对SharePoint时候可能也很难找到入手的方向.对于任何一种开发平台而言,学习开发的过程大致会包括: ...
- SharePoint服务器端对象模型 之 对象模型概述(Part 2)
(三)Url 作为一个B/S体系,在SharePoint的属性.方法参数和返回值中,大量的涉及到了Url,总的来说,涉及到的Url可以分为如下四类: 绝对路径:完整的Url,包含了协议头(http或h ...
随机推荐
- Linux下添加硬盘,分区,格式化详解
2005-10-17 在我们添加硬盘前,首先要了解linux系统下对硬盘和分区的命名方法. 在Linux下对IDE的设备是以hd命名的,第一个ide设备是hda,第二个是hdb.依此类推 我们一般主板 ...
- oracle 语句创建表空间、用户、授权
/*分为四步 */ /*第1步:创建临时表空间 */ create temporary tablespace yuhang_temp tempfile 'D:\oracledata\yuhang_te ...
- Android动画效果translate、scale、alpha、rotate详解
动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...
- 【转载】linux tail命令的使用方法详解
本文介绍Linux下tail命令的使用方法.linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新 ...
- 自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
关于 Redis ,下面来自百度百科: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set( ...
- java模仿qq好友面板的布局(BoxLayout问题)
.............. JLabel ll = new JLabel(dlg.getNameText() + ":" + dlg.getIPText(), ii[index] ...
- Office Online简介
一.什么是Office Online Office Online 将 Microsoft Office 体验扩展到了 Web 浏览器,这使您可以直接在存储文档的 SharePoint 网站上处理文档, ...
- redis在centOS的安装
1.安装tcl支持 yum install tcl 2.安装redis我们以最新的2.8.9为例 $ wget http://download.redis.io/releases/redis-2.8. ...
- 谈论XSS
XSS 叫跨站脚本攻击(Cross Site Script),那么XSS原本应该叫做CSS,但是由于CSS的简称已经被连级样式表 使用了,所以就换个称谓XSS. 为什么叫做跨站脚本攻击呢? 它的意思就 ...
- 说说jsonp
什么是jsonp jsonp充其量只能说是一种"方法".它可以让页面从其他域中获取资料. 首先要知道的是同源策略,在javascript中使用http请求(ajax)是会受到同 ...