代码之家  ›  专栏  ›  技术社区  ›  enriquein

Castle ActiveRecord的聚合查询

  •  0
  • enriquein  · 技术社区  · 16 年前

    我尝试执行一个简单的聚合查询,返回聚合的结果加上一个额外的列。这篇文章& GT; Custom query with Castle ActiveRecord 有一个很好的例子,关于如何实现这一点,但我似乎无法让它发挥作用。ActiveRecordMediator.ExecuteQuery似乎返回对象的ArrayList(而不是我所期望的对象[]的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)

    1 回复  |  直到 16 年前
        1
  •  1
  •   Mauricio Scheffer    16 年前
    1. 我想你是说 count(*) 而不是 count(1) (这就是为什么只有1列的行)
    2. ActiveRecordMediator.ExecuteQuery(至少在RC3中)返回 ArrayList (不是通用的) ICollection 的) object[]
    3. 小心铸造 count 结果为int。某些数据库返回的计数为 long (例如,SQL Server)
    推荐文章