В этом случае, что вы хотите, это 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.
Спасибо! Я попробую это сегодня вечером! – Slav 2008-12-12 09:54:30