分页在这里不起作用,错误是:不支持查询表达式。这一行出现错误:
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();
}
Skip
运算符。
CAML中没有Skip
运算符,因此查询提供程序无法为您翻译该查询。
Sharepoint支持的唯一分页操作是获取下一页,而不是第n页。执行查询后,可以通过将CamlQuery
对象的ListItemCollectionPosition
设置为ListItemCollection
的ListItemCollectionPosition
值来获取下一页。如果它为null,则没有下一页。您还需要在查询的viewXML中设置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);
}
旁注:确保已处理好ClientContext
对象。