1

SOに関する同様の言葉の質問はどれも一致していないようで、グーグルはこれについてSOをほぼ指し示しているので、これを試してみましょう。

次のようなJournalEntryエンティティクラスがあります。

public partial class JournalEntry
{
    public virtual Guid JournalEntryId { get; set; }

    public virtual Account Account { get; set; }

    public virtual decimal DebitAmount { get; set; }

    public virtual decimal CreditAmount { get; set; }

    [NotNull]
    public virtual DateTime EffectiveDate { get; set; }

    [NotNull]
    public virtual DateTime PostingDate { get; set; }

    public virtual UserProfile PostedBy { get; set; }

    [FullTextIndexed]
    public virtual string Notes { get; set; }

    public virtual Amortization Amortization { get; set; }

    public virtual ExpenseCategories ExpenseCategory { get; set; }

    [Index]
    public virtual bool IsClosed { get; set; }
}

また、次のようなトランザクションの概要を保持するための簡単なクラスもあります。

public class JournalEntrySummary
{
    public decimal Credits { get; set; }
    public decimal Debits { get; set; }
}

私がやりたいのは、CreditsプロパティとDebitsプロパティの両方の合計を返すCriteriaクエリを作成することです。IOW、このSQLクエリのような漠然とした形のものが欲しいです:

select
    sum(creditamount) as Credits,
    sum(debitamount) as Debits
from 
    journalentries
where
    ...

...そしてそれを私のJournalEntrySummaryオブジェクトに移入させます。1つの列を作成する方法の例をたくさん見てきましたが、2つの列を足し合わせた例もいくつかありましたが、2つの異なる要約を収集し、それらを非ドメインオブジェクトにダンプする例はありません。

これは可能ですか?どうすればいいですか?

4

1 に答える 1

2

基準クエリのドキュメントhttp://nhibernate.info/doc/nh/en/index.html#querycriteria-projectionを見てください。質問に答える例がいくつかあります。

あなたの例では、これを試してみてください

// using NHibernate.Criterion;
// using NHibernate.Transform;

session.CreateCriteria<JournalEntry>()
   .SetProjection(
       Projections.Sum<JournalEntry>(x => x.DebitAmount).As("Debits"),
       Projections.Sum<JournalEntry>(x => x.CreditAmount).As("Credits"),
       // you can use other aggregates
       // Projections.RowCount(),
       // Projections.Max<JournalEntry>(x => x.EffectiveDate)
    )
    .SetResultTransformer(Transformers.AliasToBean<JournalEntrySummary>())
    .UniqueResult<JournalEntrySummary>();
于 2013-03-25T13:07:09.613 に答える