编写CAML查询以使用托管元数据列查询SPList

时间:2012-08-02 09:38:49

标签: c# sharepoint-2010 caml

我有一个带有托管元数据列的SPList,这是我的caml查询。

/// 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查询以查询列是托管元数据列的列表。

请帮帮我。感谢。

2 个答案:

答案 0 :(得分:0)

SPQuery添加了Query标记本身:

 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;

答案 1 :(得分: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 / Or语句时,“In”是一种便利。

这里详细解释: http://msdn.microsoft.com/en-us/library/ff625182.aspx