2015-03-10

There are times when we have a list of items that need to be deleted from a SharePoint list and we do not want to loop it one by one and delete it for performance reason. There is a better way to deal with these type of scenario.

The method which is used for this is ProcessBatchData.

See the below code snippet how to use this:


SPSite_site =SPContext.Current.Site;
SPWeb_web = _site.OpenWeb();
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPList_list = _web.Lists["ListName"];
SPQuery_query =newSPQuery();
  _query.Query ="<Where><Eq><FieldRef Name='PrimaryKeyID' /><Value Type='Text'>"+PrimaryKeyID+"</Value></Eq></Where>";
 SPListItemCollection_collection = _list.GetItems(_query);
 if(_collection.Count > 0)
   {
StringBuildersbDelete =newStringBuilder();
    sbDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");
    stringcommand ="<Method><SetList Scope=\"Request\">"+ _list.ID +"</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>";
    foreach(SPListItemitemin_collection)
     {
      sbDelete.Append(string.Format(command, item.ID.ToString()));
     }
     sbDelete.Append("</Batch>");
     _web.ProcessBatchData(sbDelete.ToString());
   }
});

 

About the author 

Ashutosh Mund