2012-08-02 32 views
1

我有一個帶有託管元數據列的SPList,這裏是我的caml查詢。撰寫CAML查詢以查詢包含託管元數據列的SPList

/// This caml query doesn't work 
SPQuery oQuery = new SPQuery(); 
string strQuery = @"<Query><Where><In><FieldRef LookupId=""TRUE"" Name=""TaxonomyColumn"" /><Values><Value Type=""Text"">7392ec1d-3f35-4c5b-b6ad-f80ff15ed718</Value></Values></In></Where></Query>"; 
oQuery.Query = strQuery; 


/// This linq query works exactly fine 
var itms = (from SPListItem itm in oList.Items 
     where itm["TaxonomyColumn"].ToString().Contains("7392ec1d-3f35-4c5b-b6ad-f80ff15ed718") 
     select itm).ToList(); 

我的問題是,我需要使用CAML查詢出於某種原因,我不能只是弄清楚如何撰寫我的CAML查詢到上詢問名單工作的方式,其中列有管理的元數據列。

請幫幫我。謝謝。

回答

0

您不使用GUID,則需要使用查找的ID。你會發現使用TaxonomyField.GetWssIdsOfKeywordTerm()這個ID,並寫CAML這樣的:

<Query> 
    <Where> 
    <In> 
     <FieldRef LookupId="TRUE" Name="ItemType" /> 
     <Values> 
     <Value Type="Integer">14</Value> 
     <Value Type="Integer">15</Value> 
     </Values> 
    </In> 
    </Where> 
</Query> 

「在」是一個方便的,當有多個值,而不是多種EQ /或聲明。

詳細解釋在這裏: http://msdn.microsoft.com/en-us/library/ff625182.aspx

+5

http://sharepointfordeveloper.blogspot.com/2012/05/sharepoint-2010-using-in-operator-in.html 結束標記丟失。即使是微軟的例子也沒有這些標籤,每個人都會複製和粘貼,就像它的工作原理一樣(人們甚至認爲它是工作答案,這更令人困惑)。 如果沒有這些結束標記,我會得到一個運行時錯誤,如預期的那樣,關於這些結束標記丟失。 – DiggyJohn 2014-09-12 15:26:11

0

SPQuery增加了查詢標籤本身:

SPQuery oQuery = new SPQuery(); 
string strQuery = @"<Query><Where><Contains><FieldRef Name='TaxonomyColumn' /><Value Type='Text'>7392ec1d-3f35-4c5b-b6ad-f80ff15ed718</Value></Contains></Where></Query>"; 
oQuery.Query = strQuery; 
+0

我已經嘗試過,在我張貼了這個問題,100%不工作。看起來這對我來說是世界末日。 hahaha – 2012-08-03 02:30:24

+0

它不起作用 – stile17 2017-09-05 10:54:17