0

私には3つのテーブルがあります。People、Purchases、PeopleとPurchasesの間に1対多の関係があるPayments、およびPeopleandPaymentsです。

購入と支払いの合計を示す人々のレポートを生成したいと思います。

支払いまたは購入の合計を示すすべての人のレポートを簡単に生成できます。

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のいずれかを使用します。

4

1 に答える 1

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

または、アドホックマッピングを使用する場合:

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

もう1つのオプションは、MultiQueriesを使用することです。

于 2010-12-01T03:10:02.253 に答える