SharePoint 列表多表联合查询

在SharePoint平台二次开发中,我们有时需要涉及多表关联查询展示多列表中的不同字段信息;SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,有一定的局限性,需要使用SPQuery的Joins属性来完成。

  联合查询的前提条件:

  1、子列表必须采用查阅项进行关联主表;

  

  下面,我们通过一个简单的例子,为大家演示一下如何使用SPQuery通过查阅项字段来进行两个列表的联合查询。

  1、创建主列表,City是城市;子列Address,是地址,子列表新增加查阅项CityLook进行关联,如下表所示:

   

    

  2、执行查询语句:

 1 string SiteUrl = Microsoft.SharePoint.SPContext.Current.Site.Url ;
 2         using (SPSite site = new SPSite(SiteUrl))
 3         {
 4             using (SPWeb web = site.OpenWeb("/Test"))
 5             {
 6                 SPQuery query = new SPQuery();
 7                 //Joins属性,这里有INNER和LEFT两种方式连接,均可查询,而且支持多表连接;
 8                 query.Joins = "<Join Type=‘INNER‘ ListAlias=‘City‘>" +
 9                               "<Eq>" +
10                               "<FieldRef Name=‘CityLook‘ RefType=‘ID‘/>" +
11                               "<FieldRef List=‘City‘ Name=‘ID‘/>" +
12                               "</Eq>" +
13                               "</Join>";
14
15
16                 //设置关联的查阅项字段
17                 query.ProjectedFields = "<Field Name=‘CityDescription‘ Type=‘Lookup‘ List=‘City‘ ShowField=‘Description‘/>" +
18                                         "<Field Name=‘CityCode1‘ Type=‘Lookup‘ List=‘City‘ ShowField=‘Code‘/>";
19                 //设置需要显示的字段
20                 query.ViewFields = "<FieldRef Name=‘ID‘/>" +
21                                    "<FieldRef Name=‘Title‘/>" +
22                                    "<FieldRef Name=‘CityCode‘/>" +
23                                    "<FieldRef Name=‘CityLook‘/>" +
24                                    "<FieldRef Name=‘CityCode1‘/>" +
25                                    "<FieldRef Name=‘CityDescription‘/>";
26
27                 //query.Query = "<Where><Eq><FieldRef Name=‘CityCode‘/><Value Type=‘Text‘>XM</Value></Eq></Where>";
28                 //查阅项查询,采用ID值进行查询
29                 query.Query = "<Where><Eq><FieldRef Name=‘CityLook‘ LookupId=‘TRUE‘/><Value Type=‘Lookup‘>4</Value></Eq></Where>";
30
31                 SPList list = web.Lists["Address"];
32
33                 SPListItemCollection items = list.GetItems(query);
34
35                 foreach (SPListItem item in items)
36                 {
37                     SPFieldLookupValue CityLook = new SPFieldLookupValue(item["CityLook"].ToString());
38                     SPFieldLookupValue CityCode1 = new SPFieldLookupValue(item["CityCode1"].ToString());
39
40                     string info = "ID:" + item.ID.ToString() +";"+
41                                   "Title:" + item["Title"].ToString() + ";" +
42                                   "CityCode:" + item["CityCode"].ToString() + ";" +
43                                   "CityDescription:" + item["CityDescription"].ToString() + ";" +
44                                   "CityCode1:" + CityCode1.LookupValue + "[" + CityCode1.LookupId + "]" + ";" +
45                                   "CityLook:" + CityLook.LookupValue + "[" + CityLook.LookupId + "]";
46                     Response.Write(info + "<br />");
47                 }
48
49                 //DataTable dtData = items.GetDataTable();
50                 //GridView1.DataSource = dtData;
51                 //GridView1.DataBind();
52             }
53         }

  3、执行效果图:

  

  注意事项:

  1、Join属性类型Type若设置为LEFT时,若主表字段删除后,则加载可能会出错;

  2、主表的字段若要在查询结果中体现,则需通过SPQuery.ProjectedFields设置查阅项的模式进行绑定显示;

原文地址:https://www.cnblogs.com/liyuxin/p/8462496.html

时间: 2024-10-12 18:52:40

SharePoint 列表多表联合查询的相关文章

SharePoint 2013 列表多表联合查询

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

获取多表联合查询的存储过程。

USE [NopV3.3Test] GO /****** Object: StoredProcedure [dbo].[GetPostList] Script Date: 06/18/2014 15:27:19 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 于留洋 -- Create date: 2014/06

约束条件 ,表与表之间的关系 和多表联合查询***

一.约束条件    为了确保数据的完整性 可以给列加上约束条件    完整性的分类:        1.实体完整性        2.域完整性        3.引用完整性    1.实体完整性        实体:即表中的一行(一条)记录 代表一个实体 entity        实体完整性的作用:标识每一行数据不重复        约束类型:            1.1 主键约束(primary key)            1.2 唯一约束(unique)            1.3

两个表联合查询获取聊天表中用户最新的一条聊天数据

一个用户表,一个聊天记录表,两个表联合查询获取聊天表中用户最新的一条聊天数据 select c.contentfrom sixin as c where c.tid = a.user_idorder by ctime desc limit 0,1) as content,(select c.statusfrom sixin as c where c.tid = a.user_idorder by ctime desc limit 0,1) as status from users as a, s

MySQL DML操作--------多表联合查询实战

1. 背景 * 多表联合查询是把不同表的记录到一起的一种方式 * 在SQL标准中规划的联合(join)大致分内连接,外连接,全连接.其中外连接又分左外连接,右外连接. 2. 内连接例子 (inner join) [ 员工 --> 部门 ] * 查看员工表[ employees ]和部门表[ departments ]结构 mysql> desc employees; +-----------+---------------+------+-----+---------+------------

对于多表联合查询的一点理解

操作数据库时多表联合查询很常见.也知道常见联合查询的集中类型,内连接.外连接.全连接.自连接,外连接又分为左连接和右连接. 这些概念我一直都知道,但对于感念的理解并不透彻.对于不同类型的联合查询的结果数据集合没有清晰的区分.前两天,工作中又遇到的这样的问题,才开始弄明白. 内连接:传统写法:select a.*,b.* from a,b where a.column=b.column; 新式写法:select a.* from a inner join b on a.column=b.colum

MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例

工具:VS.net2013.EF6.MVC5.SQLServer2008 参考出处: http://www.cnblogs.com/slark/p/mvc-5-get-started-create-project.html http://www.cnblogs.com/miro/p/4288184.html http://www.cnblogs.com/dotnetmvc/p/3732029.html 一.准备工作 在SqlServer上创建数据库:Element 模拟两个表并插入数据:SysU

hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下.最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别. hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系. 例如:student表和score表需要做联合查询. 1)sql: select s.id,s.name,sc.score from student as s,score as sc

Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 和 IE9/10 . 它的最大优势是可以通过fetchxml 来查询,这样我们就可以实现真正的多表联合查询,虽然可以用OData终结点的$expand来进行多表的联合查询,但这种方式没办法过滤多表的条件,它只能过滤主表的条件. 下面来看下简单的多表查询的例子: 1.首先定义一个fetchxml: 1