2012-08-02 31 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