你如何使用NHibernate进行分页?
例如,我想在ASP.NET网页中填充一个gridview控件,只显示显示的行数所需的数据。 NHibernate如何支持这个?
ICriteria
有一个SetFirstResult(int i)
方法,它表示您希望获得的第一个项目的索引(基本上是页面中的第一个数据行)。
它还有一个SetMaxResults(int i)
方法,它表示你希望得到的行数(即你的页面大小)。
例如,这个标准对象获取数据网格的前10个结果:
criteria.SetFirstResult(0).SetMaxResults(10);
您还可以利用NHibernate中的Futures特性来执行查询,以获得单个查询中的总记录数以及实际结果。
例
// Get the total row count in the database.
var rowCount = this.Session.CreateCriteria(typeof(EventLogEntry))
.Add(Expression.Between("Timestamp", startDate, endDate))
.SetProjection(Projections.RowCount()).FutureValue<Int32>();
// Get the actual log entries, respecting the paging.
var results = this.Session.CreateCriteria(typeof(EventLogEntry))
.Add(Expression.Between("Timestamp", startDate, endDate))
.SetFirstResult(pageIndex * pageSize)
.SetMaxResults(pageSize)
.Future<EventLogEntry>();
要获得总记录数,请执行以下操作:
int iRowCount = rowCount.Value;
关于期货给你的一个很好的讨论就在这里。
在NHibernate 3中,你可以使用QueryOver
var pageRecords = nhSession.QueryOver<TEntity>()
.Skip(PageNumber * PageSize)
.Take(PageSize)
.List();
你也可能想明确地命令你的结果是这样的:
var pageRecords = nhSession.QueryOver<TEntity>()
.OrderBy(t => t.AnOrderFieldLikeDate).Desc
.Skip(PageNumber * PageSize)
.Take(PageSize)
.List();
链接地址: http://www.djcxy.com/p/20315.html
上一篇: How can you do paging with NHibernate?
下一篇: Python word counter