static void ProcessListItems(List list, IList<string> fieldNames, Action<ListItem> action)
{
CamlQuery camlQuery = CamlQuery.CreateAllItemsQuery(5, fieldNames.ToArray());
var retrievalsList = new List<Expression<Func<ListItem, object>>>();
foreach (string fieldName in fieldNames)
retrievalsList.Add(listItemArg => listItemArg[fieldName]);
var retrievals = retrievalsList.ToArray();
ListItemCollectionPosition itemPosition = null;
int itemCount = 0;
for (; ; )
{
camlQuery.ListItemCollectionPosition = itemPosition;
ListItemCollection listItems = list.GetItems(camlQuery);
clientContext.Load(listItems,
listItemsArg => listItemsArg.ListItemCollectionPosition,
listItemsArg => listItemsArg.Include(retrievals)
);
clientContext.ExecuteQuery();
itemPosition = listItems.ListItemCollectionPosition;
foreach (ListItem listItem in listItems)
{
action(listItem);
++itemCount;
}
Log("Processed batch: " + itemCount);
if (itemPosition == null)
break;
}
}