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

4
我遇到了一个问题,如果我在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();
2个回答

9
在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;
}

参考文献

使用客户端对象模型


如何使用OR运算符在多个WHERE条件中进行筛选? - Nitu Bansal

1

经过长时间的搜索,我确定这是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>";

解决方案来源


依旧:每天都应该用鱼抽打那些SharePoint开发人员的脸,因为当查询出错时他们会返回所有元素而不是返回空值(或者抛出错误)。 - Ole Albers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接