risposta

10

Ho risolto. L'apprendimento è stato che abbiamo bisogno di eliminare gli elementi della lista in ordine inverso.

link: 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"); 
    } 
} 
+6

Per quanto riguarda l'efficienza, sarebbe probabilmente utile spostare l'istruzione ExecuteQuery() all'esterno del ciclo. –

+1

Se si sposta ExecuteQuery all'esterno del loop e si hanno molte eliminazioni inviate come 'one execution' si potrebbe potenzialmente incorrere in un'eccezione dove Sharepoint pensa che la richiesta sia troppo grande (mi è successo con un paio di migliaia di eliminazioni) . Vedi http://sharepoint.stackexchange.com/questions/44894/client-object-model-microsoft-sharepoint-client-serverexception-the-request – n00b

+3

Accetto con @ n00b ma per ridurre l'overhead di rete aggiungerei ' if (contatore% 100 == 0) {clientContext.ExecuteQuery(); } ' – Emaborsa

0

Un'altra soluzione: - Crea un articoli (detto: DeleteAllItems), su una nuova lista (detto: configurazione).

  • Utilizzare CAML per modificare il valore deleteAllItems da False a True.

  • poi, l'uso del flusso di lavoro,

    se DeleteAllItems == true, eliminare tutti gli elementi.

    reimposta deleteAllItems su False.

Risolvere il problema di prestazioni lato client. :)

Problemi correlati