Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }