我正在尝试弄清楚如何使用Castle ActiveRecord执行自定义查询.
我能够运行返回我的实体的简单查询,但我真正需要的是下面的查询(使用自定义字段集):
select count(1)as cnt,来自workstationevent的数据,其中serverdatetime> =:minDate和serverdatetime <:maxDate和userId = 1 group by data count(1)>:threshold
谢谢!
在这种情况下你想要的是什么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一样返回聚合或函数.