对于客户,我必须通过过滤元数据从他们的共享点检索文件。我必须过滤的两个字段是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?
答案 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>
,但是在您的示例中,它没有用View
和Query
标记括起来,这很可能是您的查询被忽略并返回所有项目的原因。
示例
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();