使用CSOM for Sharepoint Online筛选TaxonomyFieldType字段

时间:2018-07-26 07:23:16

标签: c# sharepoint-online csom

对于客户,我必须通过过滤元数据从他们的共享点检索文件。我必须过滤的两个字段是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?

2 个答案:

答案 0 :(得分:2)

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

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

并将“字段”替换为“您的查询的字段名称”,以及“ filtertext”。

答案 1 :(得分:1)

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();