2

我的应用程序中有以下代码可以从共享点列表中提取详细信息。

            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"]);
        }

在共享点列表中,我创建了多个测试项目,但每次运行上述代码时,列表中的所有项目都会返回,而不管我对 camlQuery 使用什么。

任何人都可以让我知道我在 C# 的这个相当新的方面出了什么问题,并且在此之前从未接触过共享点。

Edit1:根据下面的建议进行了更新。

Edit2:简化了代码,但仍然遇到同样的问题。

4

3 回答 3

5

如果您想返回过滤后的项目,在您的情况下返回所有项目,对吗?如果是,这个问题在 CAMLQuery ...

我已经阅读了一个小文档(下面的链接):

微软 MSDN

我注意到了 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

于 2014-04-09T14:52:34.677 回答
2

问题是您的最后一行代码:

textBoxReadShow.Text = Licence + "\t\t" + MAC + "\n";

您在循环的每次迭代中截断文本框中的文本。

您似乎希望将文本附加到文本框的末尾:

textBoxReadShow.Text += Licence + "\t\t" + MAC + "\n";
于 2013-08-07T16:06:54.527 回答
-2

从 CAML 查询中删除<Query>和。</Query>

于 2013-08-08T08:34:53.557 回答