2011-03-02 58 views
5

使用某個查詢的分頁結果,我需要從哪個頁面獲得一個point。當您將該分頁從打開分頁的範圍中移出時,該對象返回位於右頁的數據結果在這個頁面。
如果分頁的結果可以像這個樣本一樣獲得,我可以從哪個頁面正在處理的項目中獲得?MongoDB c#:關於分頁的問題

paging 
.skip(PAGE_SIZE * (PAGE_NUMBER - 1)).limit(PAGE_SIZE) 

    public List<BsonItem> GetData(QueryComplete query, int take, int skip, SortByBuilder sort) 
     { 
      var cursor = Db.Data.FindAs<BsonItem>(query); 

      if (skip > 0) 
       cursor.SetSkip(skip); 
      if (take > 0) 
       cursor.SetLimit(take); 
      if (sort != null) 
       cursor.SetSortOrder(sort); 
      return cursor.ToList(); 
     } 

感謝您的幫助。

回答

9

頁碼應該(以及可能的排序順序和方向)來自客戶端。因此,客戶端點擊一些頁面和比..

我個人使用某種過濾器,包含所有你需要的屬性。

使用該過濾器,您只需指定需要在網格中顯示的頁面以及每頁需要多少項目。

var pageNumber = 1;// current page should come from the client 
var filter = new BaseFilter(){CurrentPage = pageNumber, ItemsPerPage = 30}; 
var items = GetItemsByFilter(filter, Query.LTE("SomeDate",DateTime.Now)), 
            SortBy.Ascending("SortField")); 
//For basic paging you only following three properties 
var totalCount = filter.TotalCount; // here will be total items count 
var pagesCount = filter.TotalPagesCount; // here will be total pages count 
// pageNumber = current page 

此外,您可以從BasicFilter推導並添加所需的查詢,排序所需的任何屬性。 這裏過濾代碼(希望這將是對您有用):

public List<Item> GetItemsByFilter(BaseFilter filter, 
        QueryComplete query, SortByBuilder sort) 
{ 
    var resultItems = new List<Item>(); 
    var cursor = Db.Data.FindAs<BsonItem>(query); 

    cursor.SetSortOrder(sort); 
    if (filter.IsNeedPaging) 
    { 
    cursor.SetSkip(filter.Skip).SetLimit(filter.Take); 
    filter.TotalCount = cursor.Count(); 
    } 

    resultItems.AddRange(cursor); 

    return resultItems; 
} 


public class BaseFilter 
{ 
    private int _itemsPerPage = 10; 
    private int _skip = 0; 
    private int _currentPage = 1; 

    public BaseFilter() 
    { 
    IsNeedPaging = true; 
    } 

    public int Skip 
    { 
    get 
    { 
     if (_skip == 0) 
     _skip = (CurrentPage - 1) * _itemsPerPage; 
     return _skip; 
    } 
    set 
    { 
     _skip = value; 
    } 
    } 

    public int Take 
    { 
    get 
     { 
     return _itemsPerPage; 
     } 
    set 
     { 
     _itemsPerPage = value; 
     } 
    } 

    public bool IsNeedPaging { get; set; } 

    public int TotalCount { get; set; } 

    public int CurrentPage 
    { 
     get 
     { 
      return _currentPage; 
     } 
     set 
     { 
      _currentPage = value; 
     } 
    } 

    public int ItemsPerPage 
    { 
     get 
     { 
      return _itemsPerPage; 
     } 
     set 
     { 
      _itemsPerPage = value; 
     } 
    } 

    public int TotalPagesCount 
    { 
     get 
     { 
      return TotalCount/ItemsPerPage + 
          ((TotalCount % ItemsPerPage > 0) ? 1 : 0); 
     } 
    } 
    } 
+0

目的是管理出來scoope項目未分頁方法。你有一個孤立的項目,你添加一個clik事件在另一個頁面的分頁視圖中打開,但這個點的頁碼需要打開嗎?我搜索打開選定的右側頁面。 – user325558 2011-03-02 16:44:34

+0

僅使用客戶端項目的_id(無管理方向或訂單) – user325558 2011-03-02 16:52:14