SharePoint 列表多表联合查询
2024-10-16 14:47:13
在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设置查阅项的模式进行绑定显示;
最新文章
- 一个label里有个链接,点这个特别颜色的一些字,会执行一些操作
- HDU1166线段树(单点更新,区间求和)
- jQuery源代码学习之六——jQuery数据缓存Data
- mysql通过data目录恢复数据库
- oracle中的cluster表
- 使用Git和远程代码库
- iPhone手机屏幕的尺寸
- PC-如何提高计算机的启动和关机的速度?
- Clean Code(三):注释
- Censored! - POJ 1625(ac自动机+简单dp+高精度运算)
- VS Code 的常用快捷键
- 新手最纠结的事。学什么语言最好?学什么语言有前途(or 钱途)?
- [angularjs] angularjs系列笔记(三)模型
- C语言学习及应用笔记之三:C语言const关键字及其使用
- PyCharm设置Python版本
- 通俗理解word2vec
- [原]Jenkins(十)---jenkins注册管理员admin并赋所有权限给admin
- Confluence 6 删除和归档空间
- terraform plugin 版本以及changlog 规范
- MathType如何设置标尺的单位