SharePoint 列表多表联合查询
在SharePoint平台二次开发中,我们有时需要涉及多表关联查询展示多列表中的不同字段信息;SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,有一定的局限性,需要使用SPQuery的Joins属性来完成。
联合查询的前提条件:
1、子列表必须采用查阅项进行关联主表;
下面,我们通过一个简单的例子,为大家演示一下如何使用SPQuery通过查阅项字段来进行两个列表的联合查询。
1、创建主列表,City是城市;子列Address,是地址,子列表新增加查阅项CityLook进行关联,如下表所示:




2、执行查询语句:
string SiteUrl = Microsoft.SharePoint.SPContext.Current.Site.Url ;
using (SPSite site = new SPSite(SiteUrl))
{
using (SPWeb web = site.OpenWeb("/Test"))
{
SPQuery query = new SPQuery();
//Joins属性,这里有INNER和LEFT两种方式连接,均可查询,而且支持多表连接;
query.Joins = "<Join Type='INNER' ListAlias='City'>" +
"<Eq>" +
"<FieldRef Name='CityLook' RefType='ID'/>" +
"<FieldRef List='City' Name='ID'/>" +
"</Eq>" +
"</Join>"; //设置关联的查阅项字段
query.ProjectedFields = "<Field Name='CityDescription' Type='Lookup' List='City' ShowField='Description'/>" +
"<Field Name='CityCode1' Type='Lookup' List='City' ShowField='Code'/>";
//设置需要显示的字段
query.ViewFields = "<FieldRef Name='ID'/>" +
"<FieldRef Name='Title'/>" +
"<FieldRef Name='CityCode'/>" +
"<FieldRef Name='CityLook'/>" +
"<FieldRef Name='CityCode1'/>" +
"<FieldRef Name='CityDescription'/>"; //query.Query = "<Where><Eq><FieldRef Name='CityCode'/><Value Type='Text'>XM</Value></Eq></Where>";
//查阅项查询,采用ID值进行查询
query.Query = "<Where><Eq><FieldRef Name='CityLook' LookupId='TRUE'/><Value Type='Lookup'>4</Value></Eq></Where>"; SPList list = web.Lists["Address"]; SPListItemCollection items = list.GetItems(query); foreach (SPListItem item in items)
{
SPFieldLookupValue CityLook = new SPFieldLookupValue(item["CityLook"].ToString());
SPFieldLookupValue CityCode1 = new SPFieldLookupValue(item["CityCode1"].ToString()); string info = "ID:" + item.ID.ToString() +";"+
"Title:" + item["Title"].ToString() + ";" +
"CityCode:" + item["CityCode"].ToString() + ";" +
"CityDescription:" + item["CityDescription"].ToString() + ";" +
"CityCode1:" + CityCode1.LookupValue + "[" + CityCode1.LookupId + "]" + ";" +
"CityLook:" + CityLook.LookupValue + "[" + CityLook.LookupId + "]";
Response.Write(info + "<br />");
} //DataTable dtData = items.GetDataTable();
//GridView1.DataSource = dtData;
//GridView1.DataBind();
}
}
3、执行效果图:

注意事项:
1、Join属性类型Type若设置为LEFT时,若主表字段删除后,则加载可能会出错;
2、主表的字段若要在查询结果中体现,则需通过SPQuery.ProjectedFields设置查阅项的模式进行绑定显示;
SharePoint 列表多表联合查询的更多相关文章
- SharePoint 2013 列表多表联合查询
在SharePoint的企业应用中,遇到复杂的逻辑的时候,我们会需要多表查询:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,需要使用SPQuery的Joins ...
- mybatis:开发环境搭建--增删改查--多表联合查询(多对一)
什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或 ...
- yii 多表联合查询的几种方法
yii多表联合查询, 第一种,用command,自己拼接sql语句执行查询 第二种,用AR,model需继承下面的ar,执行queryall或queryrow方法 <?php //applica ...
- MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例
有二三年没写代码了,**内的工作就是这样,容易废人!看到园子里这么多大侠朝气蓬勃的,我想也要学点东西并和大家分享,共同进步!快乐每一天,进步每一天!言归正传! 通过最近一段时间对MVC5.EF6的学习 ...
- Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新
CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...
- MyBatis 多表联合查询及优化 以及自定义返回结果集
下面就来说一下 mybatis 是通过什么来实现多表联合查询的.首先看一下表关系,如图: 这 里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了 ...
- 一步步学Mybatis-实现多表联合查询(4)
上一章节中我们已经完成了对单表的CRUD操作,接下来今天这一讲讲述的是关于Mybatis在多表查询时候的应用,毕竟实际业务中也是多表的联合查询比较多嘛~ 还记得最一开始我们新建过一张Website表吗 ...
- MyBatis之三:多表联合查询
在这篇文章里面主要讲解如何在mybatis里面使用一对一.一对多.多表联合查询(类似视图)操作的例子. 注:阅读本文前请先大概看一下之前两篇文章. 一.表结构 班级表class,学生表student, ...
- MyBatis 多表联合查询,字段重复的解决方法
MyBatis 多表联合查询,两张表中字段重复时,在配置文件中,sql语句联合查询时使用字段别名,resultMap中对应的column属性使用相应的别名: <resultMap type=&q ...
随机推荐
- Spring AMQP 源码分析 02 - CachingConnectionFactory
### 准备 ## 目标 了解 CachingConnectionFactory 在默认缓存模式下的工作原理 ## 前置知识 <Spring AMQP 源码分析 01 - Impatie ...
- js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题
js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...
- Python 爬虫-Robots协议
2017-07-25 21:08:16 一.网络爬虫的规模 二.网络爬虫的限制 • 来源审查:判断User‐Agent进行限制 检查来访HTTP协议头的User‐Agent域,只响应浏览器或友好爬虫的 ...
- ln软连接
ln软连接 ln -s 源目录/文件 目标目录/文件 例如,有个应用 /var/www/html/webapp,下面有个logs日志文件夹,想吧 webapp/logs日志文件夹链到/home ...
- 20170708xlVBA添加新产品修改公式
Sub ControlInsertProduct() Dim Wb As Workbook Dim OneSht As Worksheet Dim Arr As Variant Dim i As Lo ...
- (转)理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow
转载自http://blog.51cto.com/benpaozhe/1767612: 一直对这个问题知其然而不知其所以然,这些日子再次碰到,看了很多的资料,彻底解决一下,呵呵,先上个图,所有理解围绕 ...
- 进程控制fork vfork,父子进程,vfork保证子进程先运行
主要函数: fork 用于创建一个新进程 exit 用于终止进程 exec 用于执行一个程序 wait 将父进程挂起,等待子进程结束 getpid 获取当前进程的进程ID nice 改变进程的优先级 ...
- IIS6.0发布后对路径“D:\xxx\xxxx\web.config”的访问被拒绝问题的解决方法
原来我本机发布后还是可以直接通过浏览器访问,这几天不知道怎么就不行,终于在网上找到解决方法 IIS发布后访问xxx/xxx/web.config路径被拒绝的问题截图如下: 解决方法: 1.在本地或服务 ...
- UVALive 6322 最大匹配...
/* *e...大概明白了.首先用最大匹配看看是不是存在符合题意的匹配.然后呢.对枚举找到每个位置符合的字母里最小的那个. *判断是否能构成最大匹配.直到找完最后一个位置输出就好了.. *还是有些不理 ...
- C#中使用Spire.docx操作Word文档
使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法. 之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比 ...