NHibernate IQueryOver.ToRowCountQuery()当使用HQL IQuery时等效 [英] NHibernate IQueryOver.ToRowCountQuery() equivalent when Using HQL IQuery

查看:114
本文介绍了NHibernate IQueryOver.ToRowCountQuery()当使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆