我有三个表:人员,购买,人与购买之间的一对多关系以及人员和付款的付款。
我想生成一份人员报告,显示他们的购买和付款总和。
我可以轻松地为显示付款或购买总额的所有人生成报告,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。
答案 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。