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 ...
随机推荐
- react-native SyntaxError xxxxx/xx.js:Unexpected token (23:24)
在运行react-native项目时提示 SyntaxError xxxxx/xx.js:Unexpected token (23:24) 我这边的问题原因:jsx语法错误,解决办法就是认真排查代码然 ...
- java攻城狮之路(Android篇)--Activity生命
一:Activity的激活 1.写一个类 extends Activity Activity是android的四大组件之一.Activity的激活分为显式意图激活和隐式意图激活.如果一个activit ...
- ruby -- 基础学习(四)TimeDate处理
TimeDate格式化输出: DateTime.parse(Time.now.to_s).strftime('%Y-%m-%d %H:%M:%S').to_s #就是按照2013-8-16 16:4 ...
- [IR] Compression
关系:Vocabulary vs. collection size Heaps’ law: M = kTbM is the size of the vocabulary, T is the numbe ...
- ASP.NET身份验证
Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验 证用的最多,也最灵活. Forms 验证方式对基于用户的验证 ...
- LVM快照(snapshot)备份
转载自:http://wenku.baidu.com/link?url=cbioiMKsfrxlzrJmoUMaztbrTelkE0FQ8F9qUHX7sa9va-BkkL4amvzCCAKg2hBv ...
- 关于foreach中对集合执行Add或者Remove操作引发枚举值被修改异常
方法传入集合List<string> ids; 执行操作后再次循环引发异常 foreach (string id in ids) { ids.Add("a"); } 更 ...
- LINQ TO XML 个人的一些心得1
最近没事做,刚来到一个新公司.写了一些处理xml的项目 就是把一些xml的数据处理后存储到数据库中.原本还是准备用原来的xml来写的.在群里有个人说,用linq to xml 好了,比较快捷.就看了 ...
- EF工作中踩过的坑.
1.EF同一个linq里边不支持两个或两个以上不同dbcontext的使用,必须拆解开才能使用; ef也不支持自定义集合和dbcontext属性的混合使用. 2.如果要用用统一域账号连接databas ...
- 【jQuery基础学习】00 序
作为一个从来没有认真学过jQuery的菜来讲,我所学的都是jQuery基础. 算是让自己从0开始系统学一遍吧.学习书籍为:<锋利的jQuery>. 虽然是个序,表示一下我是个菜,但还是来几 ...