В этом случае вы хотите HqlBasedQuery
. Ваш запрос будет проекцией, поэтому вы получите ArrayList
кортежей, содержащих результаты (содержимое каждого элемента ArrayList будет зависеть от запроса, но для более чем одного значения будет object[]
).
HqlBasedQuery query = new HqlBasedQuery(typeof(WorkStationEvent),
"select count(1) as cnt, data from workstationevent where
serverdatetime >= :minDate and serverdatetime < :maxDate
and userId = 1 group by data having count(1) > :threshold");
var results =
(ArrayList)ActiveRecordMediator.ExecuteQuery(query);
foreach(object[] tuple in results)
{
int count = (int)tuple[0]; // = cnt
string data = (string)tuple[1]; // = data (assuming this is a string)
// do something here with these results
}
Вы можете создать анонимный тип для более содержательного хранения результатов. Например:
var results = from summary in
(ArrayList)ActiveRecordMediator.ExecuteQuery(query)
select new {
Count = (int)summary[0], Data = (string)summary[1]
};
Теперь результаты будут содержать коллекцию анонимных типов со свойствами Count
и Data
. Или действительно вы можете создать свой собственный тип сводки и заполнить его таким же образом.
ActiveRecord также имеет ProjectionQuery
, который делает то же самое, но может возвращать только сопоставленные свойства, а не агрегаты или функции, как вы можете с помощью HQL.