NHibernate IQueryOver.ToRowCountQuery() equivalent when Using HQL IQuery

怎甘沉沦 提交于 2019-12-24 19:12:05

问题


I'm trying to implement paging within my project.

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

For some queries we are using HQL instead of the IQueryOver syntax however.

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

回答1:


some crazy idea

string countQuery;
if (query.QueryString.StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
    countQuery = Regex.Replace(query.QueryString, "SELECT (.*) FROM", @"SELECT Count($1) FROM", RegexOptions.IgnoreCase);
else
    countQuery = "SELECT COUNT(*) " + query.QueryString;



回答2:


We've since converted our HQL queries to IQueryOver allowing us to take advantage of the ToRowCountQuery() helper.



来源:https://stackoverflow.com/questions/7733965/nhibernate-iqueryover-torowcountquery-equivalent-when-using-hql-iquery

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!