SharePoint 2013 列表多表联合查询
在SharePoint的企业应用中,遇到复杂的逻辑的时候,我们会需要多表查询;SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,需要使用SPQuery的Joins属性来完成。
下面,我们通过一个简单的例子,为大家演示一下如何使用SPQuery通过查阅项字段来进行两个列表的联合查询。
1、首先创建测试列表,City是城市,然后有一个列表叫做Address,是地址,通过查阅项Location进行关联,CityID字段是Number类型,这里代表城市的ID号;
创建列表完毕以后,输入一些简单的测试数据,如下图:

2、测试列表Address,添加一个查阅项字段,特别要说的是,截图勾选了Title,后来因为查阅项关联的就是Title,我就去掉了,希望不要对后来造成误会,如下图:

3、查看创建完毕列表的所有栏,如下图:

4、看着Location:CityID这样的名称不是很舒服,索性点进去,改名,如下图:

5、如下图,便是我们创建完毕的测试列表,包含简单的测试数据:

6、创建一个控制台程序,引用Microsoft.SharePoint.dll,编写测试代码,因为控制台程序的创建过程非常简单,这里只贴了核心代码,如下:
using (SPSite site = new SPSite(SiteUrl))
{
using (SPWeb web = site.RootWeb)
{
SPQuery query = new SPQuery();
//Joins属性,这里有INNER和LEFT两种方式连接,均可查询,而且支持多表连接;
query.Joins = "<Join Type='INNER' ListAlias='City'>" +
"<Eq>" +
"<FieldRef Name='Location' RefType='Id'/>" +
"<FieldRef List='City' Name='ID'/>" +
"</Eq>" +
"</Join>";
//设置关联的查阅项字段
query.ProjectedFields = "<Field Name='CustomCityID' Type='Lookup' " +
"List='City' ShowField='CityID'/>";
//设置需要显示的字段
query.ViewFields = "<FieldRef Name='Title'/>" +
"<FieldRef Name='Location'/>" +
"<FieldRef Name='CustomCityID'/>"; SPList list = web.GetList(ListName);
SPListItemCollection itemcoll = list.GetItems(query);
foreach (SPListItem item in itemcoll)
{
SPFieldLookupValue Location = new SPFieldLookupValue(item["Location"].ToString());
SPFieldLookupValue CustomCityID = new SPFieldLookupValue(item["CustomCityID"].ToString());
Console.WriteLine("ID:" + item.ID.ToString() + " Title:" + item["Title"].ToString() + " Location:" + Location.LookupValue + " CustomCityID:" + CustomCityID.LookupValue);
}
}
}
7、执行控制台程序,下面是查询的结果,如下图:
到这里,大家可能会有疑问,这样的查询,和列表的查询是一样的,怎么叫做多列表联合查询呢?下面请继续,听我慢慢道来;

8、我们在列表City里多添加一列,名称暂且叫做Mark,但是不将其作为查阅项关联到Address列表,如下图:

Address列表所有栏属性,并不包含Mark,如下图:

9、同时为代码的ProjectedFields多添加Mark的字段属性,如下图:
query.ProjectedFields =
"<Field Name='CustomCityID' Type='Lookup' List='City' ShowField='CityID'/>
<Field Name='CustomMark' Type='Lookup' List='City' ShowField='Mark'/>";
10、同时为显示属性加入CustomMark字段,如下图:
query.ViewFields = "<FieldRef Name='Title'/>" +
"<FieldRef Name='Location'/>" +
"<FieldRef Name='CustomCityID'/>" +
"<FieldRef Name='CustomMark'/>";
输出添加CustomMark字段的值,如下:
SPFieldLookupValue CustomMark = new SPFieldLookupValue(item["CustomMark"].ToString());
Console.WriteLine("CustomMark:" + CustomMark.LookupValue)
11、再次执行控制台程序,并没有以查阅项关联到Address的Mark字段,也被查询出来了,也就是我们说的多表联合查询,如下图:

总 结
以上内容,就是本文的全部内容,SharePoint多表查询,通过查阅项字段进行关联,然后使用SPQuery的Joins属性进行关联查询,通过设置关联的字段和需要显示的字段来设置显示,完成关联查询。
本例是使用列表City和Address进行关联查询,查询Address列表通过查阅项关联查询City列表;列表结构附后,好了,就到这里吧,希望本文能够带给需要的人以帮助,谢谢!
附:列表结构
列表一:City
字段:Title(默认字段,单行文本,作为Address关联的查阅项)
CityID(数字类型,作为Address关联的查阅项)
Mark(单行文本,作为多表查询的测试字段)
列表二:Address
字段:Title(默认)
Location(查阅项,关联City列表的Title)
CustomCityID(查阅项,关联City列表的CityID)
附:参考链接
http://social.msdn.microsoft.com/Forums/sharepoint/zh-CN/866a49fd-0656-4a8a-9e11-36eeb4401005/sharepoint-2010-caml-list-joins
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spquery.joins.aspx
SharePoint 2013 列表多表联合查询的更多相关文章
- SharePoint 列表多表联合查询
在SharePoint平台二次开发中,我们有时需要涉及多表关联查询展示多列表中的不同字段信息:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,有一定的局限性,需 ...
- Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新
CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...
- SharePoint 2013 列表关于大数据的测试<二>
1.给测试列表添加查阅项字段,100个,代码如下: 2.插入测试数据的方法,注意查阅项字段的格式,代码如下: 3.插入10w条数据,时间花费如下(不建议List[LISTNAME].Items.Add ...
- MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例
有二三年没写代码了,**内的工作就是这样,容易废人!看到园子里这么多大侠朝气蓬勃的,我想也要学点东西并和大家分享,共同进步!快乐每一天,进步每一天!言归正传! 通过最近一段时间对MVC5.EF6的学习 ...
- Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!
记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...
- sharepoint 2013 列表和库标签 元数据导航配置(2)
接前面提到的,如何创建一个术语库.sharepoint 2013 列表和库标签 元数据导航配置(1), 现在要做的,就是如何在自定义或者文档库中使用这个术语库,实现标签功能,通过这些标签,找到对应的文 ...
- mybatis:开发环境搭建--增删改查--多表联合查询(多对一)
什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或 ...
- SharePoint 2013 配置基于表单的身份认证
前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处w ...
- yii 多表联合查询的几种方法
yii多表联合查询, 第一种,用command,自己拼接sql语句执行查询 第二种,用AR,model需继承下面的ar,执行queryall或queryrow方法 <?php //applica ...
随机推荐
- SVN分支与合并
分支的基本概念就正如它的名字,开发的一条线独立于另一条线,如果回顾历史,可以发现两条线分享共同的历史,一个分支总是从一个备份开始的,从那里开始,发展自己独有的历史(如下图所示) ⑴创建分支 假设目前我 ...
- D3D11中的MSAA
这两年我的工作都转到了D3D11,目前新出硬件几乎全部支持此标准,加上D3D11接口清晰,概念直观,等到windows7普及,想必未来都是D3D11的天下.最近时间较空,我陆续开始写些基础文章,希望对 ...
- jdbc根据实例名 连接 sql server
jdbc:sqlserver://PC;instanceName=sql2012;databaseName=xxxxx
- ruby类名之间<,<=方法
有时候看源码的时候看到类名之间存在<.<=操作,顿时一头雾水,类名之间也可以比较吗?查了下api,豁然开朗 Class的父类是Module,Module.methods.grep(/< ...
- hibernate的多对多例子讲解(加图片)
在hibernate中也有多对多的关系.但是这样关系执行的效率不高,所以我们可以通过两个多对1或者两个1对多来实现. 在现实生活中多对多的关系也比较常见.比如说老师和学生.一个老师有多个学生,一个学生 ...
- LDPC编译码基本原理
LDPC编译码基本原理 学习笔记 V1.1 2015/02/18 LDPC编译码基本原理 概述 本文是个人针对LDPC的学习笔记,主要针对LDPC译码算法做了简要的总结.该版本主要致力 ...
- Tips6:用[HideInInspector]在Inspector中隐藏变量
你曾想要把某些公有变量在Inspetor面板中隐藏起来吗,这样很简单就能做到. 让我们来看以下代码: using UnityEngine; public class HidingScript : Mo ...
- Python单元测试框架之pytest -- fixtures
fixtures不太好翻译,可看作是夹心饼干最外层的两片饼干.通常用setup/teardown来表示.它主要用来包裹测试用例,为什么需要这样的饼干呢?我们以web自动化测试为例,例如,要测试的某系统 ...
- Tiff – 值得你体验一下的可视化的字体对比工具
Tiff 是一款字体对比工具,可视化对比两种字体之间的差异.这是一个工具来帮助比较两种字体,同时学习排版.在这一点上,谷歌 Web 字体作为 Tiff 外部字体文件的唯一来源.由于应用程序使用的一些功 ...
- C++ async task
最近在搞Android 开发,里面多线程的使用比较频繁,java多线程接口很方便. Thread, AysncTask, Handler 这些接口比起posix提供的pthread_create()等 ...