2010-12-01 3 views
0

사람, 구매, 사람과 구입 간의 일대 다 관계가있는 지급, 사람 및 지급의 세 테이블이 있습니다.NHibernate를 사용하여 두 개의 합계가있는 테이블을보고합니다.

나는 Purchases와 Payments의 합계를 보여주는 People의 보고서를 생성하려고합니다.

내가 쉽게 지불 또는 구매의 합을 보여주는 모든 사람에 대한 보고서를 생성 할 수 있습니다 마주 :

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을 사용하십시오. 이 같은

답변

2

시도 뭔가 : ad-hoc mapping을 사용

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(); 

아니면이 :

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을 사용하는 것입니다.

+0

감사합니다. DetachedCriteria 내에서 동일한 작업을 수행 할 수 있는지 알고 있습니까? 내가 작업하고있는 API는 HQL 쿼리가 아닌 DetachedCriteria를 기대합니다. –

+0

나는 그것이 확실하다고 생각하지만 전염병과 같은 기준을 피하기 때문에 여기서 당신을 도울 수는 없습니다. 엑스) – rebelliard