Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB c#:关于分页的问题_C#_Pagination_Mongodb_Mongodb .net Driver - Fatal编程技术网

MongoDB c#:关于分页的问题

MongoDB c#:关于分页的问题,c#,pagination,mongodb,mongodb-.net-driver,C#,Pagination,Mongodb,Mongodb .net Driver,使用某个查询的分页结果,我需要从哪一页获取点。当您在该页打开分页结果时,该对象将返回位于正确页的数据。 如果分页结果可以像这个示例一样获得,我如何从正在提交的页面中的项目中获得 paging .skip(PAGE_SIZE * (PAGE_NUMBER - 1)).limit(PAGE_SIZE) public List<BsonItem> GetData(QueryComplete query, int take, int skip, SortByBuilder sort

使用某个查询的分页结果,我需要从哪一页获取点。当您在该页打开分页结果时,该对象将返回位于正确页的数据。
如果分页结果可以像这个示例一样获得,我如何从正在提交的页面中的项目中获得

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();
        }
分页
.跳过(页码*(页码-1)).限制(页码大小)
公共列表GetData(QueryComplete查询、int-take、int-skip、SortByBuilder排序)
{
var cursor=Db.Data.FindAs(查询);
如果(跳过>0)
游标.SetSkip(跳过);
如果(取>0)
cursor.SetLimit(take);
if(排序!=null)
cursor.SetSortOrder(排序);
返回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推断它,并添加查询、排序所需的任何属性。 这里是过滤代码(希望对您有用):

公共列表GetItemsByFilter(基本筛选器筛选器、,
QueryComplete查询,SortByBuilder排序)
{
var resultItems=新列表();
var cursor=Db.Data.FindAs(查询);
cursor.SetSortOrder(排序);
if(filter.IsNeedPaging)
{
cursor.SetSkip(filter.Skip).SetLimit(filter.Take);
filter.TotalCount=cursor.Count();
}
resultItems.AddRange(光标);
返回结果;
}
公共类基过滤器
{
私有int_itemsPerPage=10;
私有整数_skip=0;
私有int_currentPage=1;
公共基筛选器()
{
IsNeedPaging=true;
}
公共整数跳过
{
得到
{
如果(_skip==0)
_跳过=(当前页面-1)*\u项目页面;
返回-跳过;
}
设置
{
_跳过=值;
}
}
公众参与
{
得到
{
返回_itemsPerPage;
}
设置
{
_itemsPerPage=值;
}
}
公共bool IsNeedPaging{get;set;}
公共整数TotalCount{get;set;}
公共int当前页
{
得到
{
返回当前页面;
}
设置
{
_currentPage=值;
}
}
公共int项目页面
{
得到
{
返回_itemsPerPage;
}
设置
{
_itemsPerPage=值;
}
}
公共网页搜索
{
得到
{
返回TotalCount/ItemsPerPage+
((TotalCount%ItemsPerPage>0)?1:0);
}
}
}

该对象是管理scoope项目,而不是分页方法。您在某个位置有一个孤立的项目,您添加了一个clik事件以在另一个页面的分页视图中打开,但此点需要打开的页码是多少?。我正在搜索以在选定的右侧页面打开。仅使用客户端项目的_id(无方向或订单管理)
 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);
         }
     }
   }