使用C#分页问题SP 2010

时间:2013-12-23 15:41:20

标签: c# sharepoint-2010 sharepoint-clientobject

分页在这里不起作用,它说的错误:不支持查询表达式。 此行发生错误:
clientContext.Load(listItems,itms => itms.Skip((PageNumber - 1)* PageSize).Take(PageSize));

有人可以建议吗?

由于

    /// <summary>
    /// Method to return list of documents of a specific document library
    /// </summary>
    /// <param name="docLibaryName"></param>
    /// <returns></returns>
    public List<Document> GetDocumentsByLibraryName(string spURL, string docLibaryName, int PageSize, int PageNumber)
    {

        List<Document> docList = new List<Document>();
        //Access the Document Library
        ClientContext clientContext = new ClientContext(spURL);
        List sharedDocumentsList = clientContext.Web.Lists.GetByTitle(docLibaryName);

        //Specify the Caml Query
        CamlQuery camlQuery = new CamlQuery();
        camlQuery.ViewXml =
            @"<View Scope='Recursive'></View>";
        ListItemCollection listItems = sharedDocumentsList.GetItems(camlQuery);
         clientContext.Load(listItems, itms => itms.Skip((PageNumber - 1) * PageSize).Take(PageSize));
        clientContext.ExecuteQuery();
        AddItemsToDocumentCollection(docList, listItems);
        return docList.ToList();
    }

1 个答案:

答案 0 :(得分:2)

错误表明不支持Skip运算符。

CAML中没有Skip运算符,因此查询提供程序无法为您翻译该查询。

Sharepoint支持的唯一分页操作是获取下一页,而不是第n页。在执行查询后,您可以通过将CamlQuery对象的ListItemCollectionPosition设置为ListItemCollectionPosition的{​​{1}}值来获取下一页。如果它为null,则没有下一页。您还需要在查询的viewXML中设置ListItemCollection以确定页面大小。

它看起来像这样:

RowLimit

附注:请务必丢弃using (var context = new ClientContext("http://vddp23q-5d16d1e/")) { var query = new CamlQuery(); var list = context.Web.Lists.GetByTitle("Documents"); int pageSize = 10; query.ViewXml = string.Format( @"<View><RowLimit Paged='true'>{0}</RowLimit></View>", pageSize); ListItemCollection items; do { items = list.GetItems(query); context.Load(items); context.ExecuteQuery(); foreach (var item in items) DoStuff(item); query.ListItemCollectionPosition = items.ListItemCollectionPosition; } while (items.ListItemCollectionPosition != null); } 个对象。