2013-12-23 8 views
2

Пейджинг здесь не работает, ошибка говорит: выражение запроса не поддерживается. Ошибка возникает в этой строке:
clientContext.Load (listItems, itms => itms.Skip ((PageNumber - 1) * PageSize) .Take (PageSize));Paging Issue SP 2010 с C#

Не могли бы вы посоветовать пожалуйста?

Благодаря

/// <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(); 
    } 

ответ

2

Skip оператор не поддерживается, так как ошибка указывает на то.

В CAML нет оператора Skip, поэтому поставщик запросов не сможет перевести этот запрос для вас.

Единственная операция подкачки, поддерживаемая Sharepoint, - это получение следующей страницы, а не n-й страницы. Вы можете получить следующую страницу, установив объект ListItemCollectionPosition как ListItemCollectionPosition значение ListItemCollection после выполнения запроса. Если это значение равно null, то следующей страницы не будет. Вы также должны установить RowLimit в представлении запросаXML запроса, чтобы определить размер страницы.

Это будет выглядеть примерно так:

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); 
} 

Side Примечание: убедитесь, что вы выбрасывайте ClientContext объектов.

+0

Как можно сделать пейджинг, используя этот подход? Нужно ли мне смотреть на некоторые другие подходы? –

+0

@HariGillala См. Редактирование. – Servy

+0

Если это значение равно null, то следующей страницы нет. Спасибо, это хороший совет, поскольку возвращение назад после окончания страницы не представляется возможным. По крайней мере, похоже. –

 Смежные вопросы

  • Нет связанных вопросов^_^