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 ...
随机推荐
- 为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用
转自:https://blog.csdn.net/clementad/article/details/46928621 HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他 ...
- Java类和对象的概念
Java是一门面向对象的编程语言,理解Java,首先要理解类与对象这两个概念. Java中的类可以看做C语言中结构体的升级版.结构体是一种构造数据类型,可以包含不同的成员(变量),每个成员的数据类型可 ...
- 3.2 x86体系结构
计算机组成 3 指令系统体系结构 3.2 x86体系结构 X86是商业上最为成功,影响力最大的一种体系结构.但从技术的角度看,它又存在着很多的问题,那我们就来一起分析X86这种体系结构的特点. 要探讨 ...
- Confluence 6 为 Active Directory 配置一个 SSL 连接预要求
希望生成证书,你需要安装下面的组件在你希望连接的 Windows Domain Controller 上. Internet Information Services (IIS) 在你安装 Windo ...
- html <table>标签信息
table的属性 border pixcels 规定表格边框的宽度 cellpadding picels/% 规定单元格边沿与内容之间的空白 cellspacing picels/% 规定表格以及单元 ...
- mysql日常运维
一.Linux内核和发行版本 uname -a cat /etc/issue 二.glibc的版本 /lib/libc.so.6 ---没有man函数据的动态链接库 三.MySQL的版 ...
- SQL Server 调优系列进阶篇 - 查询优化器的运行方式
前言 前面我们的几篇文章介绍了一系列关于运算符的基础介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符. ...
- vue-router如何做历史返回提示?
获取vue-router的上一个页面是否存在或者是否是自己需要返回的地址,可以使用vue-router的的声明周期函数,有三种模式: 第一种.使用全局函数beforeEach,直接来获取form.pa ...
- bzoj1053&&51nod1060
题解: 其实就是求1-n之中拥有最多约数的数 一个数x的质因数分解为p1^e1*p2^e2*...*pn^en,则正因数的个数为(e1+1)(e2+1)...(en+1) 那么发现,正因数的个数和p没 ...
- vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据。
业务的需要:我要对与会人员勾选,记录所选的与会人员,并且点击到别的页面上时也要记录所勾选的.第一次尝试,每次点击下一页数据都会清空.然后我就去element ui官网查看了api.实现如下: 在tab ...