NHibernate - 如何在分页结果上使用sum项目

时间:2011-11-22 17:32:16

标签: c# .net nhibernate paging

我正在尝试将分页与sum投影结合使用,以获得我感兴趣的结果页面的列中值的总和。我正在使用.NET,C#和NHibernate 3.1 < / p>

我有一个ICriteria,它与相关的db表中的所有行相关。

我正在执行以下操作以获取第一页的版本(例如,40个中的10个项目):

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

我正在将此ICriteria用于其他内容,因此我创建了另外两个克隆:

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个结果中获得ColA值的总和?

谢谢

1 个答案:

答案 0 :(得分:0)

可能最容易做到总和客户端。聚合函数在整个表上运行。你要做的是针对分页结果运行聚合函数,这是NH认为不可能的。

换句话说,您需要select sum(colA) from (select top 10 ...),但该条件会为您提供select top 10 sum(colA) from ...)