2011-03-02 6 views
5

hakkında soru bir yanıyla nesne çağırdım açılış kapsam dışında noktaya itmek zaman doğru sayfaya yerleştirilmiş verileri döndürmek olduğunu bu sayfada sonuçlanır.
Sayfalanan sonuç bu örnekte olduğu gibi elde edilebilirse, bir sayfadan hangi sayfadan geldiğimi nasıl öğrenebilirim?MongoDB C# i neyi sayfasından almak gerekir bazı sorgunun bir sayfalık sonucu kullanarak sayfalama

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

Yardımlarınız için teşekkürler.

cevap

9

Sayfa numarası (ve sıralama düzenini ve yönü mümkün) istemci tarafında gelmelidir. Bazı sayfasında ve Kişisel

.. daha istemci tıklama Yani İhtiyacınız olan tüm özellikleri içerir filtrenin kullanacak. sen sadece ızgara ve ne kadar ürün sayfa başına ihtiyaç içinde gösterilecek lüzum sayfasını belirtmek gerekir filtre kullanarak

.

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 

Ayrıca, BasicFilter öğesinden çıkarım yapabilir ve sorgulama, sıralama için gereken tüm özellikleri ekleyebilirsiniz. İşte filtre kodu (sizin için yararlı olacağını umuyoruz):

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

nesne Scoope öğeleri değil çağrı yöntemi dışına yönetmek olduğunu. Bir yerde izole bir öğeniz var, başka bir sayfadaki sayfalanmış bir görünümde açmak için bir clik olayı eklersiniz, ancak bu noktanın sayfa numarası açılmalı mıdır? Seçilen doğru sayfada açmak için arıyorum. – user325558

+0

İstemciden yalnızca öğenin _id değerini kullanarak (yön veya sipariş yönetilemez) – user325558

İlgili konular