(四)使用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)的更多相关文章

  1. SharePoint服务器端对象模型 之 使用LINQ进行数据访问操作(Part 4)

    (六)高效合理的使用LINQ 1.DataContext中的两个属性 为了能够使用DataContext进行数据提交,在DataContext进行数据查询和操作的过程中,内部会进行数据状态的保持和追踪 ...

  2. SharePoint服务器端对象模型 之 使用CAML进展数据查询

    SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列 ...

  3. SharePoint服务器端对象模型 之 使用CAML进行数据查询

    (一)概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列表条目的集合. 除去列表上的查询之外,在SharePoint中还大 ...

  4. SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 4)

    (五)列表查询中的阈值限制 在之前版本的SharePoint 中,如果在查询的时候没有指定返回数目,那么SharePoint将会查找该列表中所有的条目,这可能会造成在SQL表中需要返回大量的条目,极大 ...

  5. SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 2)

    (三)使用SPQuery进行列表查询 1.概述 列表查询主要是指在一个指定的列表(或文档库)中按照某些筛选.排序条件进行查询.列表查询主要使用SPQuery对象,以及SPList的GetItems方法 ...

  6. SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)

    (四)使用SPSiteDataQuery进行多列表查询 1.概述 前面介绍的列表查询有很多优势,但是它的一个缺点就是一次只能在一个列表中进行查询,在SharePoint中,提供了一个跨网站.跨列表查询 ...

  7. SharePoint服务器端对象模型 完结

    整个系列已完结,大概看了一眼,平均阅读量不到200.估计也没什么人看了,而且服务器端对象模型除了在某些企业开发中会用到,从2013时代开始其实已经不是SharePoint开发的最佳选择了.不过既然已经 ...

  8. SharePoint服务器端对象模型 之 序言

    对于刚刚开始接触SharePoint的开发人员,即使之前有较为丰富的ASP.NET开发经验,在面对SharePoint时候可能也很难找到入手的方向.对于任何一种开发平台而言,学习开发的过程大致会包括: ...

  9. SharePoint服务器端对象模型 之 对象模型概述(Part 2)

    (三)Url 作为一个B/S体系,在SharePoint的属性.方法参数和返回值中,大量的涉及到了Url,总的来说,涉及到的Url可以分为如下四类: 绝对路径:完整的Url,包含了协议头(http或h ...

随机推荐

  1. [转]GeoHash核心原理解析

    原文出处: zhanlijun    引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近的餐 ...

  2. H5+CSS3实现手指滑动切换图片

    包含3个文件:html.slider-H5.js.jquery.js(自行下载).在html中可配置滑动参数.具体代码如下: HTML代码: <!DOCTYPE HTML> <htm ...

  3. 【weka应用技术与实践】过滤器

    weka中的过滤器主要用于数据预处理阶段对数据集的各种操作. 今天简单地使用一下过滤器: 首先打开一个自带数据集weather.numeric.arff,这是一个关于通过天气条件,气温以及风力等因素来 ...

  4. 【转载】solr初体验

    [1]http://cxshun.iteye.com/blog/1039445 由于工作原因,这段时间接触到solr,一个基于lucene的企业级搜索引擎.不怎么了解它的童鞋可以去GOOGLE一下. ...

  5. 使用Python画ROC曲线以及AUC值

    from:http://kubicode.me/2016/09/19/Machine%20Learning/AUC-Calculation-by-Python/ AUC介绍 AUC(Area Unde ...

  6. Java知多少(106)程序与数据库连接

    一个网络关系数据库应用系统是一个三层次结构.客户机与服务器采用网络连接,客户机端应用程序按通信协议与服务器端的数据库程序通信:数据库服务程序通过SQL命令与数据库管理系统通信. Java程序与数据库连 ...

  7. EHCACHE采用分布需要注意的地方

    分布式EHCACHE系统,有两种同步方式 方式1 :  RMI组播方式 这也是最常用的方式,配置简单,关键一点,各EHCACHE的节点配置都是一样的 原理:这样当缓存改变时,ehcache会向230. ...

  8. bower的使用

    一.bower的安装 安装nodejs的最新版本: 安装npm. 由于npm是nodejs的包管理器,所以在将nodejs安装完成后,npm也就自动安装完成. 安装git. 安装bower. 使用 n ...

  9. 分享27款最佳的复古风格 WordPress 主题

    WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单易用. 复古风格可以应用于任何东西,从服装到室内设计,那么复古风格的 ...

  10. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...