c# - 带聚合的分页投影 nhibernate 查询的总结果

标签 c# sql-server nhibernate

我正在动态构建一个需要实现分页的 nhibernate 投影查询。像...

var projections = Projections.ProjectionList();
foreach (var p in projection.Projections)
{
    IProjection newProjection = null;
    switch (p.AggregateFunc)
    {
        case AggregateFuncTypeEnum.GroupProperty:
            newProjection = Projections.GroupProperty(p.Path);
            break;
        case AggregateFuncTypeEnum.Sum:
            newProjection = Projections.Sum(p.Path);
            break;
        default:
            newProjection = Projections.Property(p.Path);
            break;
    }
    projections.Add(newProjection, p.Name);
}
criteria.SetProjection(projections).SetResultTransformer(new AliasToBeanResultTransformer(projectionType));

我可以这样得到前15个结果

criteria.SetFirstResult(0);
criteria.SetMaxResults(15);
var results = criteria.List();

但我还需要发送另一个查询来获取记录总数,但到目前为止我还没有弄清楚。仍然需要应用投影,即如果结果按“代码”分组,总和为“成本”,则 100 条记录可能返回 20 行,这是我感兴趣的 20 行。

如何获取将返回的记录总数?谢谢

最佳答案

也许是这样的:

var rowcount = CriteriaTransformer.Clone(criteria);

var goupprojections = Projections.ProjectionList();
var projections = Projections.ProjectionList();
foreach (var p in projection.Projections)
{
    IProjection newProjection = null;
    switch (p.AggregateFunc)
    {
        case AggregateFuncTypeEnum.GroupProperty:
            newProjection = Projections.GroupProperty(p.Path);
            goupprojections.Add(Projections.GroupProperty(p.Path), p.Name);
            break;
        case AggregateFuncTypeEnum.Sum:
            newProjection = Projections.Sum(p.Path);
            break;
        default:
            newProjection = Projections.Property(p.Path);
            break;
    }
    projections.Add(newProjection, p.Name);
}
criteria.SetProjection(projections).SetResultTransformer(new AliasToBeanResultTransformer(projectionType));

if (goupprojections.Aliases.Length == 0)
{
    rowcount.SetProjection(Projections.RowCount())
}
else
{
    rowcount.SetProjection(Projections.Count(goupprojections))
}

var results = criteria.Future();
var count = rowcount.FutureValue<int>();

关于c# - 带聚合的分页投影 nhibernate 查询的总结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7832800/

相关文章:

c# - 如何压缩base64字符串

c# - 如何返回具有禁止状态 web api 的 ModelState

sql-server - 检查两个无限区间是否重叠

sql-server - 如果文件消失,如何删除(localdb)数据库

java - 具有大量实体的 hibernate 性能

c# - 如何从 hibernate.cfg.xml 文件中获取连接字符串值?

c# - 将 EBNF 翻译成 Irony

c# - iTextSharp 5.5.6.0 错误?复选框刻度线更改

sql - 从 SUM(column) <= @variable 的表中选择前 X

NHibernate JoinQueryOver 返回所有子类型条目