NHibernate IQueryOver.ToRowCountQuery()当使用HQL IQuery时等效 [英] NHibernate IQueryOver.ToRowCountQuery() equivalent when Using HQL IQuery
问题描述
我正在尝试在我的项目中实现分页.
I'm trying to implement paging within my project.
当使用如下所示的NHibernate的IQueryOver语法时,事情将按预期工作.
When using NHibernate's IQueryOver syntax as shown below things are working as expected.
public PagedResult<T> ExecutePagedQuery(IQueryOver<T,T> query)
{
SetPaging(query);
var results = query.Future<T>();
var count = query.ToRowCountQuery().FutureValue<int>();
return new PagedResult<T>()
{
TotalItemCount = count.Value,
PageOfResults = results.ToList()
};
}
protected virtual void SetPaging(IQueryOver<T, T> query)
{
var maxResults = PageSize;
var numberToSkip = (PageNumber - 1) * PageSize;
query.Skip(numberToSkip).Take(maxResults);
}
但是对于某些查询,我们使用的是HQL而不是IQueryOver语法.
For some queries we are using HQL instead of the IQueryOver syntax however.
我想知道是否存在与"query.ToRowCountQuery().FutureValue< int>()"的等效项,当传递IQueryOver的IQuery insead以提供行数时,可以在查询时使用该等效项.
I'm wondering if there is an equivalent to "query.ToRowCountQuery().FutureValue< int >()" that can be used when querying when passing an IQuery insead of an IQueryOver to provide the row count.
public PagedResult<T> ExecutePagedQuery(IQuery query)
{
SetPaging(query);
var results = query.Future<T>();
var count = // ToRowCountQueryEquivalent?
return new PagedResult<T>()
{
TotalItemCount = count,
PageOfResults = results.ToList()
};
}
protected virtual void SetPaging(IQuery query)
{
var maxResults = PageSize;
var numberToSkip = (PageNumber - 1) * PageSize;
query.SetFirstResult(numberToSkip);
query.SetMaxResults(maxResults);
}
推荐答案
此后,我们将HQL查询转换为IQueryOver,从而使我们能够利用ToRowCountQuery()帮助器.
We've since converted our HQL queries to IQueryOver allowing us to take advantage of the ToRowCountQuery() helper.
这篇关于NHibernate IQueryOver.ToRowCountQuery()当使用HQL IQuery时等效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!