2011-05-02 33 views
2

Hello Sharepoint開發人員!SPQuery:加入列表和在國外列表中的位置

你有沒有試過在列表和在這兩個列表中放置where子句所需的列表之間進行連接? 我可以在第一個列表中完成,但無法找到如何在外部列表中放置的位置。

我嘗試了幾種解決方案,像這樣的:

using (SPWeb web = sps.OpenWeb()) 
      { 
       SPList spl = web.GetList(customers); 
       SPQuery query = new SPQuery(); 
       query.Query = "<Where><Eq><FieldRef Name='Suspended'/><Value Type='Boolean'>0</Value></Eq></Where>"; 
       [email protected]"<Join Type='Inner' ListAlias='CountryList'><And><Eq><FieldRef Name='Country' RefType='Id'/><FieldRef List='CountryList' Name='ID'/></Eq><Eq><FieldRef List='CountryList' Name='Continent' /><Value Type='Text'>Europe</Value></Eq> 
         </And></Join>"; 
       .... 

但是,這是行不通的。我想讓所有來自歐洲所有城鎮(另一個名單)的未暫停客戶都來到這裏。所以我需要在主要列表(spl)中的某個位置獲取不被暫停的客戶,以及在外國列表中的哪個位置才能從歐洲獲得城鎮。我無法將我的位置放在Join元素中。我試圖把它放在查詢中,給出列表別名,但它也不起作用。

你有想法嗎? 謝謝!

回答

0

使用將布爾值轉換爲文本的計算列。

2

好吧,我發現我的答案:

您可以添加一個where子句甚至在國外名單,但目標字段不能爲布爾:(因爲有支持的類型(ProjectedFields) 其實如果您希望在其特定字段上過濾外來列表,您可能希望在投影字段元素中聲明它,以便在SPQuery的Query屬性中的where子句中識別它們。

例如,在前一種情況下,

SPList spl = web.GetList(customers); 
      SPQuery query = new SPQuery(); 
      query.Query = @"<Where><And> 
<Eq><FieldRef Name='Suspended'/><Value Type='Boolean'>0</Value></Eq> 
<Eq><FieldRef Name='ContinentCountryList' List="CountryList"/><Value Type='Text'>Europe</Value></Eq> 
</And></Where>"; 
       [email protected]"<Join Type='Inner' ListAlias='CountryList'><Eq><FieldRef Name='Country' RefType='Id'/><FieldRef List='CountryList' Name='ID'/></Eq> 
        </Join>"; 
    query.ProjectedFields = "<Field Name='ContinentCountryList' Type='Lookup' List='CountryList' ShowField='Continent'/> 

現在,這是行之有效的,我不會暫停來自歐洲城鎮的客戶。所以我必須在projectionFields元素中引用我的外場。但它只是上面在MSDN鏈接中列出類型的工作...

太壞對我來說是一個布爾值,我想我必須處理臨時列表中的內存,除非你有任何其他建議...