AutomatedTagging.Program.ProcessListItems C# (CSharp) Method

ProcessListItems() static private method

static private ProcessListItems ( List list, IList fieldNames, Action action ) : void
list List
fieldNames IList
action Action
return void
        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;
            }
        }