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