我正在尝试执行一个简单的聚合查询,该查询返回聚合的结果以及一个额外的列。这篇帖子 - <!> gt; 使用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]
    };

<!>中的行<!>来自<!>中的摘要是抛出无效强制转换异常的那个。

(忘了提及:使用VS2008,.NET 3.5SP1,ActiveRecord 1.0RC3,NHibernate 1.2)

有帮助吗?

解决方案

  1. 我认为你的意思是count(*)而不是count(1)(这就是为什么你只得到1-col行)
  2. ActiveRecordMediator.ExecuteQuery(至少在RC3中)返回ArrayList(不是通用的ICollectionobject[]
  3. 小心将count结果转换为int。某些数据库将计数返回为long(例如SQL Server)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top