使用NHibernate报告具有两个总和的表

时间:2010-12-01 01:36:18

标签: nhibernate nhibernate-criteria

我有三个表:人员,购买,人与购买之间的一对多关系以及人员和付款的付款。

我想生成一份人员报告,显示他们的购买和付款总和。

我可以轻松地为显示付款或购买总额的所有人生成报告,http:

var query = 
  DetachedCriteria.For<People>("People")
  .CreateAlias("Payments", "paymentsMade");

query.SetProjection(Projections.ProjectionList()
  .Add(Projections.GroupProperty("Id"), "Id")
  .Add(Projections.Sum("paymentsMade.Amount"), "TotalPayments")

我可以在NHibernate的单个查询中执行此操作吗?使用标准API(首选)或HQL。

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

var query = @"select
                (select sum(pu.Amount) from Purchase pu where pu.People.Id = ppl.Id),
                (select sum(pa.Amount) from Payments pa where pa.People.Id = ppl.Id) 
              from People ppl";

var results = session
                .CreateQuery(query)
                .List();

或者使用ad-hoc mapping

public class BulkReport
{
    public double Purchases { get; set; }
    public double Payments  { get; set; }
}

var results = session
                .CreateQuery(query)
                .SetResultTransformer(Transformers.AliasToBean(typeof(BulkReport)))
                .List<BulkReport>();

另一种选择是使用MultiQueries