Как написать следующий запрос SQL в NHibernate - PullRequest
2 голосов
/ 11 апреля 2011

Эй, я пытаюсь понять, как написать следующее, используя NHibernate ICriteria (Multi критерий?) Для следующего:

(это запрос на получение списка имен, упорядоченных по популярности в таблице за последний день)

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 

Кроме того, учитывая, что это всего лишь пара столбцов из таблицы, исключая идентификатор, а NHibernate нужны идентификаторы для своих объектов, какой самый простой способ «подделать» идентификатор, чтобы я мог просто получить результаты?

1 Ответ

4 голосов
/ 11 апреля 2011

Для этого вам нужно использовать проекции и трансформатор. Вот некоторая справочная информация 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>();

Вам необходимо создать класс с именем FirstNameOccurance, который имеет 2 свойства с именами FirstName и Occurances.

...