【发布时间】:2011-11-22 17:32:15
【问题描述】:
我正在尝试将分页与总和投影结合使用,以获得我感兴趣的结果页面的列中值的总和。我正在使用 .NET、C# 和 NHibernate 3.1
我有一个 ICriteria 开始,它与关联数据库表中的所有行相关。
然后我正在执行以下操作以获取带有第一页的版本(例如,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 个 - 正是我想要的。
假设从数据库返回的对象有一个名为“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 值的总和?
谢谢
【问题讨论】:
标签: c# .net nhibernate paging