0

我正在尝试执行一个简单的聚合查询,该查询返回聚合的结果加上一个额外的列。This post -> 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 summary in”之后的行是引发无效转换异常的行。

(忘了说:使用 VS2008、.NET 3.5SP1、ActiveRecord 1.0RC3、NHibernate 1.2)

4

1 回答 1

1
  1. 我认为你的意思是count(*)而不是count(1)(这就是为什么你只得到 1-col 行)
  2. ActiveRecordMediator.ExecuteQuery(至少在 RC3 中)返回一个ArrayList(不是泛型ICollection的)object[]
  3. 小心将count结果转换为 int。一些数据库返回计数为long(例如 SQL Server)
于 2009-05-08T03:43:40.420 回答