CamlQuery - 如何在C#中使用Where子句

时间:2014-01-13 19:05:14

标签: c# asp.net sharepoint-2010 caml

我是CamlQuery的新手,需要一些帮助才能让它发挥作用。

我安装了一个名为CamlDesigner的工具来帮助我生成在Sharepoint中过滤集合所需的XML,但是CamlDesigner构造的XML查询在我的C#代码隐藏中不起作用。我有一个我想要过滤的ID字段,我只想从Sharepoint中检索ID = 1(或2或3或其他)的项目。

以下是设计师生成的Caml查询:

   <Where>
      <Eq>
         <FieldRef Name='ID' />
         <Value Type='Counter'>1</Value>
      </Eq>
   </Where>

这是我的C#代码,我试图合并这个Caml查询。 C#工作,但它返回“My SP Coll”中的每一项,而不是仅返回ID等于1 的项目。

// Sharepoint web service to retrieve categories items there
ClientContext clientContext = new ClientContext("https://myweb.dev.com/SP");
List oList = clientContext.Web.Lists.GetByTitle("My SP Coll");

CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<Query><Where><Eq><FieldRef Name='ID'/><Value type='Counter'>" + ID.ToString() + "</Value></Eq></Where></Query>";
Microsoft.SharePoint.Client.ListItemCollection collListItem = oList.GetItems(camlQuery);

clientContext.Load(collListItem);
clientContext.ExecuteQuery();

foreach (Microsoft.SharePoint.Client.ListItem oListItem in collListItem) {
     string ID = oListItem["ID"].ToString();
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

  1. 除了<View>...</View>元素之外,查询还需要包含在<Query>元素中。

  2. 根据生成的查询,字段名称为ID而不是Id

  3. 在旁注中,请确保您处置客户端上下文。

    当然,要按ID获取项目,您可以绕过整个过程并使用

    var item = list.GetItemById(ID);
    

答案 1 :(得分:1)

ViewXml属性只指向列表中的视图,但似乎不处理过滤。

如果您要设置已经过滤的视图并将ViewXml指向该视图,那么您仍然会抓取视图中的所有项目,但由于视图本身已被过滤,因此您的结果集会与之匹配