Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate-如何在分页结果上使用sum项目_C#_.net_Nhibernate_Paging - Fatal编程技术网

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

C# NHibernate-如何在分页结果上使用sum项目,c#,.net,nhibernate,paging,C#,.net,Nhibernate,Paging,我尝试将分页与求和投影结合使用,以获得我感兴趣的结果页面的列中的值之和。我正在使用.NET、C和NHibernate3.1 我有一个ICriteria,它与关联db表中的所有行相关 然后,我将执行以下操作以获得第一页的版本,即40项中的10项: ICriteria recordsCriteria = CriteriaTransformer.Clone(criteria); recordsCriteria.SetFirstResult(0); recordsCriteria.SetMaxResul

我尝试将分页与求和投影结合使用,以获得我感兴趣的结果页面的列中的值之和。我正在使用.NET、C和NHibernate3.1

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

然后,我将执行以下操作以获得第一页的版本,即40项中的10项:

ICriteria recordsCriteria = CriteriaTransformer.Clone(criteria);
recordsCriteria.SetFirstResult(0);
recordsCriteria.SetMaxResults(10);
我将此iCiteria用于其他用途,因此我再创建两个克隆:

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();
pageAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum("ColA"));
vat pageSum = pageAddCriteria.UniqueResult();
totalSum中的值是正确的

为了得到前10个ColA值的总和,我尝试以下方法:

totalAggCriteria.SetProjection(NHibernate.Criterion.Projections.Sum("ColA"));
var totalSum = totalAggCriteria.UniqueResult();
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值的总和吗


谢谢

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


换句话说,你想从前10名中选择sumcolA。。。但这个标准会让你从…

Thank@dotjoe中选出前十名的sumcolA,我现在正试图用linq解决这个问题。问题是我也在使用泛型,所以在编译时不知道对象的类型。我可以这样做:“List page=pageAggCriteria.List.ToList;”要获得对象列表,我需要执行类似的操作:“page.Sumx=>x…”,但同样,我不知道编译时Tdb的类型,因此无法指定“x.field”进行求和。我知道字段的名称,如果这有帮助的话,但不确定如何使用它…哦,您需要将泛型方法约束到某个接口或类,该接口或类定义了字段,如Where Tbd:IColA。感谢@dotjoe,您应该阅读通用约束,实际上,按照您的建议在客户端执行,然后使用返回对象上的反射对值进行汇总,从而解决了所有问题。正如我所提到的,我知道对象的字段名,因此可以很高兴地这样做