2011-04-11 5 views
2

안녕 - 나는 다음과 같은 사항에 대해 NHibernate에 ICriteria (다중 기준?)를 사용하여 다음과 같은 작성하는 방법을 알아 내기 위해 싸우고있어 :어떻게 NHibernate에에서 다음 SQL 쿼리를 작성하는

(그것은 목록을 얻을 수있는 쿼리를 마지막 날의 표에 인기도 순으로 정렬 첫번째 이름)의

또한
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

이렇게하려면 투영법과 변환기를 사용해야합니다. 여기에 몇 가지 배경 정보를 당신은 firstName과 차례 나오는라는 두 속성을 가진 클래스라는 FirstNameOccurance을 만들어야합니다 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>(); 

에게 있습니다.

+0

대단히 감사합니다. Vadim - 매력처럼 작동합니다. 나는 배울 NHibernate가있다! – n00b

관련 문제