我正在尝试将分页与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值的总和?
谢谢
答案 0 :(得分:0)
可能最容易做到总和客户端。聚合函数在整个表上运行。你要做的是针对分页结果运行聚合函数,这是NH认为不可能的。
换句话说,您需要select sum(colA) from (select top 10 ...)
,但该条件会为您提供select top 10 sum(colA) from ...)