使用 CSOM for Sharepoint Online 筛选 TaxonomyFieldType 字段

Filter on TaxonomyFieldType fields using CSOM for Sharepoint Online

对于客户,我必须通过过滤元数据从他们的共享点检索文件。我必须过滤的两个字段是 TaxonomyFieldType 字段。我一直在寻找解决方案,并找到了一些示例,这些示例向我展示了如何使用 CAML 查询进行过滤,但它对我不起作用。该列表没有被过滤,而是显示了所有文件。

ClientContext clientContext = SP.Helpers.ConnectionHelpers.Auth(username, password, siteurl);

if (clientContext == null) return;

List oList = clientContext.Web.Lists.GetByTitle("list");
clientContext.Load(oList);
clientContext.ExecuteQuery();

View view = oList.Views.GetByTitle("view");
clientContext.Load(view);
clientContext.ExecuteQuery();

CamlQuery camlQuery = new CamlQuery();

string query = @"<Where><Contains><FieldRef Name='field' /><Value Type='Text'>filtertext</Value></Contains></Where>";
camlQuery.ViewXml = query;

ListItemCollection collListItem = oList.GetItems(camlQuery);

clientContext.Load(collListItem, items => items.Include(
            item => item.Id,
            item => item.DisplayName, item => item.Properties));

clientContext.ExecuteQuery();

以上代码是我到现在才想到的。有谁知道如何可靠地过滤 TaxonomyFieldTypes?

CamlQuery.ViewXml Property 需要以下格式的值:

<View>
   <Query>
     ...
   </Query>
</View>

但在您的示例中,它没有包含在 ViewQuery 标记中,这很可能是您的查询被忽略并返回所有项目的原因。

示例

 var list = ctx.Web.Lists.GetByTitle(listName);

 var camlQuery = new CamlQuery();
 var query = String.Format(@"<Where><Contains><FieldRef Name='{0}' /><Value Type='Text'>{1}</Value></Contains></Where>",fieldName,fieldValue);
 camlQuery.ViewXml = String.Format("<View><Query>{0}</Query></View>", query);

 var items = list.GetItems(camlQuery);
 ctx.Load(items, icol => icol.Include(
            item => item.Id,
            item => item.DisplayName, item => item.Properties));

 ctx.ExecuteQuery();

我认为您可以尝试使用以下代码进行查询:

<View>
  <Query>
    <Where>
        <Contains>
            <FieldRef Name='field' />
            <Value Type='Text'>filtertext</Value>
        </Contains>
    </Where>
  </Query>
</View>

并将 'field' 替换为 'The Name of your query Field Name',以及 'filtertext'。