2

ねえ-私は次のNHibernateICriteria(多基準?)を使用して次のように書く方法を理解するために戦っています:

(これは、最終日のテーブルで人気順に並べられた名のリストを取得するためのクエリです)

select firstname,count(firstname) as occurances from registrants
where timestamp between DateAdd(day,-1, GetDate()) and getdate()
group by firstname
order by count(firstname) desc 

また、これはIDを除いたテーブルのほんの数列であり、NHibernateはそのオブジェクトにIDを必要とします。結果を取得できるように、IDを「偽造」する最も簡単な方法は何でしょうか。

4

1 に答える 1

4

これを行うには、プロジェクションとトランスフォーマーを使用する必要があります。ここにいくつかの背景情報がありますhttp://nhibernate.info/doc/nh/en/index.html#querycriteria-projection

var criteria = Session.CreateCriteria<Registrant>()
   .Add(Restrictions.Between("Timestamp", DateTime.Now.AddDays(-1), DateTime.Now)
   .AddOrder(Order.Desc(Projections.Count("FirstName")))
   .SetProjection(Projections.ProjectionList()
        .Add(Projections.GroupProperty("FirstName"), "FirstName")
        .Add(Projections.Count("FirstName"), "Occurances")
   .SetResultTransformer(Transformers.AliasToBean<FirstNameOccurance>());

criteria.List<FirstNameOccurance>();

FirstNameとOccurancesという2つのプロパティを持つFirstNameOccuranceというクラスを作成する必要があります。

于 2011-04-11T16:46:29.700 に答える