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

使用NHibernate报告具有两个和的表,nhibernate,nhibernate-criteria,Nhibernate,Nhibernate Criteria,我有三个表:人员、采购、付款,人员和采购之间有一对多的关系,以及人员和付款 我想生成一份显示人们购买和付款总额的报告 我可以很容易地为所有人生成一份报告,显示付款或购买的总额,即: var query = DetachedCriteria.For<People>("People") .CreateAlias("Payments", "paymentsMade"); query.SetProjection(Projections.ProjectionList() .Ad

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

我想生成一份显示人们购买和付款总额的报告

我可以很容易地为所有人生成一份报告,显示付款或购买的总额,即:

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

query.SetProjection(Projections.ProjectionList()
  .Add(Projections.GroupProperty("Id"), "Id")
  .Add(Projections.Sum("paymentsMade.Amount"), "TotalPayments")
var查询=
分离标准。用于(“人员”)
.CreateAlias(“付款”、“付款方式”);
query.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty(“Id”),“Id”)
.添加(预测金额(“付款金额”),“总付款”)

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

尝试以下操作:

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();
或者使用:

公共类报告
{
公共双重购买{get;set;}
公共双重支付{get;set;}
}
var结果=会话
.CreateQuery(查询)
.SetResultTransformer(Transformers.AliasToBean(typeof(BulkReport)))
.List();

另一个选项是使用。

谢谢,效果很好。你知道在DetachedCriteria中是否可以做同样的事情吗?我正在使用的API需要DetachedCriteria而不是HQL查询。我很确定这是正确的,但我避免使用类似瘟疫的条件,所以我在这里帮不了你。x)
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>();