我的应用程序中有以下代码,用于从共享点列表中提取详细信息。
string siteUrl = "http://SHAREPOINTURL";
ClientContext clientContext = new ClientContext(siteUrl);
clientContext.Credentials = new NetworkCredential("UN", "PW", "DOMAIN");
SP.List oList = clientContext.Web.Lists.GetByTitle("Licences");
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<Where><Eq><FieldRef Name='Account' /><Value Type='Text'>123456</Value></Eq></Where>";
ListItemCollection collListItem = oList.GetItems(camlQuery);
clientContext.Load(collListItem);
clientContext.ExecuteQuery();
Console.WriteLine("Filtered List: " + collListItem.Count.ToString() + "\n");
foreach (ListItem oListItem in collListItem)
{
Console.WriteLine("Account: {0} \nLicence: {1} \nMAC: {2}\n", oListItem["Account"], oListItem["Licence"], oListItem["MAC"]);
}
在sharepoint列表中,我创建了多个测试项,但每次运行上面的代码时,无论我使用什么用于camlQuery,都会返回列表中的所有项。
任何人都可以让我知道这个C#的新手在哪里出错,在此之前从未触及过sharepoint。
Edit1:根据以下建议更新。
Edit2:简化了代码但仍然遇到了同样的问题。
答案 0 :(得分:5)
如果要返回已过滤的项目,在您的情况下返回所有项目,是否正确?如果是的话,这个问题出在CAMLQuery ......
我已经阅读了一些小文档(链接如下):
我注意到格式化ViewXml:
camlQuery.ViewXml = "<Where><Eq><FieldRef Name='Account' /><Value Type='Text'>123456</Value></Eq></Where>"
尝试使用此代码:
camlQuery.ViewXml = "<View><Query><Where><Eq><FieldRef Name='Account' /><Value Type='Text'>123456</Value></Eq></Where></Query></View>"
我一直在使用caml。
要反映的一些语法:
camlquery.query = "<query> ..... </query>";
camlquery.ViewXml = "<view> ..... </view>";
抱怨我的坏英语:S
答案 1 :(得分:2)
问题是你的最后一行代码:
textBoxReadShow.Text = Licence + "\t\t" + MAC + "\n";
您在循环的每次迭代中截断文本框中的文本。
您似乎希望将文本附加到文本框的末尾:
textBoxReadShow.Text += Licence + "\t\t" + MAC + "\n";
答案 2 :(得分:-2)
从CAML查询中删除<Query>
和</Query>
。