Per recuperare il numero degli items di una lists per una determinata Query, eventualmente creata a run time, la sintassi base che uno scriverebbe è la seguente:
int
ItemCount;
SPQuery query =
new
SPQuery();
query.Query = view.Query;
ItemCount = list.GetItems(query).Count;
da questo snippet ho omesso il RowLimit perchè altrimenti non avrei una Count valida, supponendo di creare un paginatore.
Ma qui ho riscontrato un enorme problema, i tempi di risposta, perchè il GetItems anche se alla fine richiediamo il Count comunque restituisce tutti gli items e poi ritorna il totale, ho notato che già con 3000 items i tempi di attesa si aggirano sui 10/14 secondi (un botto!!!).
La soluzione è banalissima, comunque siamo costretti a fare il GetItems, ma considerato che abbiamo necessità solo di una Count cerchiamo di minimizzare il tutto e quindi nella mia query specificherò che i ViewFields dovranno essere solamente 1 cioè l'ID (numerico), quindi insieme allo snippet di prima aggiungeremo anche:
1
query.ViewFields =
"<FieldRef Name='ID' />"
;
Kid's stuff