我正在尝试执行一个简单的聚合查询,该查询返回聚合的结果以及一个额外的列。这篇文章 - > Custom query with Castle ActiveRecord有一个很好的例子说明如何实现这一点,但我似乎无法让它发挥作用。似乎ActiveRecordMediator.ExecuteQuery返回一个对象的ArrayList(而不是object []的ArrayList,这是我所期望的)。此外,如果我尝试将其强制转换为ICollection,我会收到运行时错误,抱怨无效的强制转换。代码如下,任何帮助表示赞赏(不想使用手写的sql)。
HqlBasedQuery query = new HqlBasedQuery(typeof(Something), @"select count(1),
p.Name from Something p
where p.SomeDate > :date
order by p.Name
group by p.Name");
query.SetParameter("date", new DateTime(2009, 1, 1));
var results = from summary in
(ICollection<object[]>)ActiveRecordMediator.ExecuteQuery(query)
select new {
Count = (int)summary[0], Name= (string)summary[1]
};
“from in in”之后的行是抛出无效强制转换异常的行。
(忘了提及:使用VS2008,.NET 3.5SP1,ActiveRecord 1.0RC3,NHibernate 1.2)
答案 0 :(得分:1)
count(*)
而不是count(1)
(这就是你只获得1-col行的原因)ArrayList
ICollection
(不是通用object[]
)
count
结果转换为int。某些数据库将计数返回为long
(例如SQL Server)