Использование NHibernate для сообщения таблицы с двумя суммами - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть три таблицы: люди, покупки, платежи с отношениями «один ко многим» между людьми и покупками и люди и платежи.

Я хочу создать отчет о людях, показывающий сумму их покупоки платежи.

Я могу легко создать отчет для всех людей, показывающий сумму платежей или покупок, см .:

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 Ответ

2 голосов
/ 01 декабря 2010

Попробуйте что-то вроде этого:

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 .

...