CAML 查询到 SharePoint 列表返回整个集

本文关键字:返回 列表 查询 SharePoint CAML | 更新日期: 2023-09-27 17:56:33

我一直遇到一个问题,如果我在 C# 中执行 CAML 查询,我的 ListItemCollection 包含整个列表。这是一个片段也许你可以看到我做错了什么。在调试时,我发现生成的 XML 是我从文件中读取的值所期望的。似乎有一个问题实际执行查询并加载结果。我在这里所做的步骤对我来说似乎不正确,我觉得我错过了一步。

using Microsoft.SharePoint.Client;
...
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(user, password, domain);
ClientContext clientContext = new ClientContext(uri);
clientContext.Credentials = credentials;
List list = clientContext.Web.Lists.GetByTitle(listName);
//read line of input from file and save to string[]
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<Query><Where><And><Eq><FieldRef Name='"Entity'" /><Value Type='"Text'">" + columns[2].Trim() + "</Value></Eq><And><Eq><FieldRef Name='"Title'"/><Value Type='"Text'">" + columns[0].Trim() + "</Value></Eq><Eq><FieldRef Name='"Section'" /><Value Type='"Text'">" + columns[1].Trim() + "</Value></Eq></And></And></Where></Query>";
ListItemCollection listItems = list.GetItems(camlQuery);
clientContext.Load(listItems);
clientContext.ExecuteQuery();

CAML 查询到 SharePoint 列表返回整个集

在SharePoint CSOM中,CamlQuery.ViewXml 属性的根元素是 <View> ,例如:

public CamlQuery CreateInventoryQuery(string searchSku)
{
   var qry = new CamlQuery();
   qry.ViewXml =
      @"<View>
         <Query>
          <Where>
            <BeginsWith>
              <FieldRef Name='SKU' />
              <Value Type='Text'>" + searchSku + @"</Value>
            </BeginsWith>
          </Where>
        </Query>
       </View>";
   return qry;
}

引用

使用客户端对象模型

因此,

经过长时间的搜索,我确定这是 CAML 查询本身的问题。显然,我需要用 VIEW 标签将 XML 括起来,否则它甚至不会执行查询。由于某种原因,以下更改实际上有效。

camlQuery.ViewXml = "<View><Query><Where><And><Eq><FieldRef Name='"Entity'" /><Value Type='"Text'">" + columns[2].Trim() + "</Value></Eq><And><Eq><FieldRef Name='"Title'"/><Value Type='"Text'">" + columns[0].Trim() + "</Value></Eq><Eq><FieldRef Name='"Section'" /><Value Type='"Text'">" + columns[1].Trim() + "</Value></Eq></And></And></Where></Query></View>";

解决方案来源