1. 程式人生 > >SharePoint 列表多表聯合查詢

SharePoint 列表多表聯合查詢

int lists esp mco 連接 city .com spf 城市

在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設置查閱項的模式進行綁定顯示;

SharePoint 列表多表聯合查詢