【问题标题】:Delete all rows in sharepoint list using Client Context and CAML Query使用客户端上下文和 CAML 查询删除共享点列表中的所有行
【发布时间】:2013-04-07 12:03:31
【问题描述】:

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

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

【问题讨论】:

    标签: c#-4.0 sharepoint sharepoint-2010 sharepoint-list sharepoint-clientobject


    【解决方案1】:

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

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

    【讨论】:

    • 就效率而言,您最好将 ExecuteQuery() 语句移到循环之外。
    • 如果您将 ExecuteQuery 移到循环外部,并且您将许多删除作为“一次执行”发送,您可能会遇到 Sharepoint 认为您的请求太大的异常(它发生在我有几千次删除)。见sharepoint.stackexchange.com/questions/44894/…
    • 我同意@n00b 但为了减少网络开销我会添加if (counter % 100 == 0){ clientContext.ExecuteQuery(); }
    【解决方案2】:

    另一种解决方法: - 创建一个项目(说:deleteAllItems),在一个新列表上(说:配置)。

    • 使用 CAML 将 deleteAllItems 值从 False 更改为 True。

    • 然后,使用工作流,

      如果 deleteAllItems == True,则删除所有项目。

      将 deleteAllItems 重置为 False。

    解决客户端性能问题。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多