如何在页面结果上使用sum项目

本文关键字:sum 项目 结果 | 更新日期: 2023-09-27 18:15:30

我正在尝试将分页与求和投影结合使用,以获得我感兴趣的结果页面的列中值的总和。我使用。net, c#和NHibernate 3.1

我有一个iccriteria要开始,它与关联db表中的所有行相关。

然后我执行以下操作以获得第一页的版本(例如,40项中的10项):

ICriteria recordsCriteria = CriteriaTransformer.Clone(criteria);
recordsCriteria.SetFirstResult(0);
recordsCriteria.SetMaxResults(10);

我将此iccriteria用于其他内容,因此我随后创建两个进一步的克隆:

ICriteria totalAggCriteria = CriteriaTransformer.Clone(criteria);
ICriteria pageAggCriteria = CriteriaTransformer.Clone(recordsCriteria);

如果我看一下这两个新条目,第一个有40个条目,第二个有10个——这正是我想要的。

假设从DB返回的对象有一个名为"ColA"的列,其类型为Int32

从这里,我想要所有40个ColA值的总和和前10个ColA值的总和。

要获得所有40个ColA值的总和,我执行以下操作:

totalAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum("ColA"));
var totalSum = totalAggCriteria.UniqueResult();

totalSum的值是正确的

要获得前10个ColA值的总和,我正在尝试以下操作:

pageAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum("ColA"));
vat pageSum = pageAddCriteria.UniqueResult();

但是,对于所有40个ColA值,这给了我与前一个相同的值。

我也试过下面的,但它给出了相同的结果:

pageAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum(column));
pageAggCriteria.SetFirstResult(firstResult.Value);
pageAggCriteria.SetMaxResults(pageSize.Value);
pageSum = pageAggCriteria.UniqueResult();

也:

pageAggCriteria.SetFirstResult(firstResult.Value);
pageAggCriteria.SetMaxResults(pageSize.Value);
pageAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum(column));  
pageSum = pageAggCriteria.UniqueResult();

谁能给我一个主意在哪里我错了,我怎么能得到前10个结果的可乐值的总和?

谢谢

如何在页面结果上使用sum项目

可能在客户端最容易做到。聚合函数对整个表进行操作。你要做的是对页面结果运行聚合函数,我认为这是不可能的与NH。

换句话说,你想要select sum(colA) from (select top 10 ...)但这个标准会给你select top 10 sum(colA) from ...)