我是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();
}
感谢您的帮助!
答案 0 :(得分:2)
除了<View>...</View>
元素之外,查询还需要包含在<Query>
元素中。
根据生成的查询,字段名称为ID
而不是Id
。
在旁注中,请确保您处置客户端上下文。
当然,要按ID获取项目,您可以绕过整个过程并使用
var item = list.GetItemById(ID);
答案 1 :(得分:1)
ViewXml
属性只指向列表中的视图,但似乎不处理过滤。
如果您要设置已经过滤的视图并将ViewXml
指向该视图,那么您仍然会抓取视图中的所有项目,但由于视图本身已被过滤,因此您的结果集会与之匹配