public async Task <List <Model.ListItem> > ExecuteQuery(Model.ListQuery query) { using (var context = CreateContext(query.List.Web.Url)) { var serverList = context.Web.Lists.GetById(query.List.Id); var listQuery = new CamlQuery { ViewXml = $"<View Scope='RecursiveAll'><Query>{query.Query}</Query></View>" }; var items = serverList.GetItems(listQuery); context.Load(items //,i => i.Include(item => item.Id) ); await Task.Factory.StartNew(() => context.ExecuteQuery()); return(items.Cast <ListItem>() .Select(i => new Model.ListItem(query.List) { Id = i.Id, Columns = query.List .Fields .ToDictionary( f => f.InternalName, f => ElementSelector(f, i) ) }) .ToList()); } }
public async Task <List <Model.ListItem> > ExecuteQuery(Model.ListQuery query, int?pageSize) { using (var context = CreateContext(query.List.Web.Url)) { var queryString = query.Query.StartsWith("<Query>", StringComparison.OrdinalIgnoreCase) ? query.Query : $"<Query>{query.Query}</Query>"; var serverList = context.Web.Lists.GetById(query.List.Id); ListItemCollection pageItems = null; var items = new List <Model.ListItem>(); do { var rowLimit = pageSize.HasValue ? $"<RowLimit>{pageSize}</RowLimit>" : string.Empty; var listQuery = new CamlQuery { ViewXml = $"<View Scope='RecursiveAll'>{queryString}{rowLimit}</View>", ListItemCollectionPosition = pageItems?.ListItemCollectionPosition }; pageItems = serverList.GetItems(listQuery); context.Load(pageItems); await Task.Factory.StartNew(() => context.ExecuteQuery()); items.AddRange( pageItems .Cast <ListItem>() .Select(i => new Model.ListItem(query.List) { Id = i.Id, Columns = query.List .Fields .ToDictionary( f => f.InternalName, f => ElementSelector(f, i) ) }) ); }while (pageItems?.ListItemCollectionPosition != null); return(items); } }