Sharepoint 客户端对象模型更新集合中的所有项目
Sharepoint Client Object Model update all items in collection
我有一些测试代码可以很好地更新集合中的所有项目,但我看到提示说在大多数情况下,作为最佳实践,您应该只调用一次 ExecuteQuery()。我不确定该怎么做,如果我删除第一个调用,代码会中断并出现集合未初始化错误。有没有办法将此代码更改为只有一个 ExecuteQuery?我的代码如下。谢谢
static void Main(string[] args)
{
ClientContext context = new ClientContext("my url to list");
List list = context.Web.Lists.GetByTitle("list name");
CamlQuery query = new CamlQuery();
query.ViewXml="<View><Query><Where><IsNull><FieldRef Name='xfoc'/></IsNull></Where></Query></View>";
ListItemCollection items = list.GetItems(query);
context.Load(items);
context.ExecuteQuery();
for (int i = 0; i < items.Count; i++ )
{
items[i]["Title"] = "unprocessed record # " + i.ToString();
items[i].Update();
}
context.ExecuteQuery();
Console.ReadKey();
}
代码看起来不错。我相信你误解了最佳实践。在您的示例中,您甚至无法首先从服务器获取项目集合而无法更新项目集合。所以第一个 ExecuteQuery() 是强制性的。
将 ExecuteQuery() 视为到服务器的往返以获取数据。它必须用在绝对需要的地方。
查看 this 文章中的最佳实践 4。
我有一些测试代码可以很好地更新集合中的所有项目,但我看到提示说在大多数情况下,作为最佳实践,您应该只调用一次 ExecuteQuery()。我不确定该怎么做,如果我删除第一个调用,代码会中断并出现集合未初始化错误。有没有办法将此代码更改为只有一个 ExecuteQuery?我的代码如下。谢谢
static void Main(string[] args)
{
ClientContext context = new ClientContext("my url to list");
List list = context.Web.Lists.GetByTitle("list name");
CamlQuery query = new CamlQuery();
query.ViewXml="<View><Query><Where><IsNull><FieldRef Name='xfoc'/></IsNull></Where></Query></View>";
ListItemCollection items = list.GetItems(query);
context.Load(items);
context.ExecuteQuery();
for (int i = 0; i < items.Count; i++ )
{
items[i]["Title"] = "unprocessed record # " + i.ToString();
items[i].Update();
}
context.ExecuteQuery();
Console.ReadKey();
}
代码看起来不错。我相信你误解了最佳实践。在您的示例中,您甚至无法首先从服务器获取项目集合而无法更新项目集合。所以第一个 ExecuteQuery() 是强制性的。
将 ExecuteQuery() 视为到服务器的往返以获取数据。它必须用在绝对需要的地方。
查看 this 文章中的最佳实践 4。