c# - MongoDB C# : Question about pagination

标签 c# pagination mongodb mongodb-.net-driver

使用某个查询的分页结果,我需要从哪个页面获取点。当您将点推出范围时,该对象将返回位于正确页面的数据,从而在此页面打开分页结果。< br/> 如果可以像这个示例一样获得分页结果,我如何从即将到来的页面的项目中获取?

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

感谢您的帮助。

最佳答案

页码应该(以及可能的排序顺序和方向)来自客户端。所以客户端点击某个页面然后...

我个人使用某种过滤器,其中包含您需要的所有属性。

使用该过滤器,您只需指定需要在网格中显示的页面以及每页需要多少项目。

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

关于c# - MongoDB C# : Question about pagination,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5168082/

相关文章:

c# - 获取枚举的最大值

c# - 发生节点取消选中 - TreeView

c# - 线程与后台 worker

angular - 更改 ag-grid 上的页面和缓存 block 大小会导致项目无限加载

javascript - 将新集合添加到现有 mongo 数据库

c# - DateTime.Kind 未在 WCF 中返回

javascript - UIkit.pagination 不是一个函数

javascript - dataTables Ajax 内容和行颜色不适用于分页

java - @LastModifiedBy 和 @LastModifiedDate 不适用于嵌入对象

.net - 为 SignalR 实现背板和消息总线