使用客户端上下文和CAML查询删除sharepoint列表中的所有行

Yog*_*esh 9 sharepoint sharepoint-2010 sharepoint-list c#-4.0 sharepoint-clientobject

我是SharePoint新手,希望使用C#ClientContext类和CAML Query删除SharePoint列表中的所有行.

我怎样才能有效地实现它?

Yog*_*esh 15

我解决了 学习是我们需要以相反的顺序删除列表项.

链接:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitemcollection.delete.aspx

ListItemCollection listItems = oList.GetItems(CamlQuery.CreateAllItemsQuery());
clientContext.Load(listItems,
                    eachItem => eachItem.Include(
                    item => item,
                    item => item["ID"]));
clientContext.ExecuteQuery();

var totalListItems = listItems.Count;
Console.WriteLine("Deletion in " + currentListName + "list:");
if (totalListItems > 0)
{
    for (var counter = totalListItems - 1; counter > -1; counter--)
    {
        listItems[counter].DeleteObject();
        clientContext.ExecuteQuery();
        Console.WriteLine("Row: " + counter + " Item Deleted");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 就效率而言,你可能会很好地将ExecuteQuery()语句移到循环之外. (7认同)
  • 我同意@ n00b但是为了减少网络开销我会添加`if(counter%100 == 0){clientContext.ExecuteQuery(); }` (5认同)
  • 如果您将ExecuteQuery移动到循环外部,并且您有许多删除作为"一次执行"发送,您可能会遇到一个异常,其中Sharepoint认为您的请求太大(它发生在我身上有几千个删除).请参阅http://sharepoint.stackexchange.com/questions/44894/client-object-model-microsoft-sharepoint-client-serverexception-the-request (3认同)