在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设置查阅项的模式进行绑定显示;

最新文章

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

热门文章

  1. 【Golang】幽灵变量(变量覆盖)问题的一劳永逸解决方法
  2. LRU缓存淘汰算法
  3. English trip -- VC(情景课)1 E Writing
  4. RabbitMq windows 安装
  5. ViewPagerIndicator+viewpager的简单使用,不需要导入Library包
  6. Professional layer CodeForces - 1103D (状压,gcd)
  7. 河南省第十一届ACM大学生程序设计竞赛
  8. mac连接Windows远程桌面
  9. MySQL解析过程、执行过程
  10. jsp jsp属性范围