Pergunta

Eu estou tentando executar uma consulta de agregação simples que retorna o resultado da agregação, mais uma coluna extra. Este post -> consulta personalizada com Castle ActiveRecord teve um bom exemplo sobre como conseguir isso , mas eu não consigo fazê-lo funcionar. Parece que ActiveRecordMediator.ExecuteQuery retorna um ArrayList de objetos (em vez de ArrayList de objeto [] que é o que eu esperaria). Além disso, se eu tentar lançá-lo aos ICollection recebo um erro de tempo de execução reclamando do elenco inválido. Código abaixo, qualquer ajuda apreciado (não quero sql uso da mão-escrito).

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]
    };

A linha após "de resumo na" é aquele que lança a exceção de elenco inválido.

(Esqueci de mencionar: usando VS2008, .NET 3.5SP1, ActiveRecord 1.0RC3, NHibernate 1.2)

Foi útil?

Solução

  1. Eu acho que você quis count(*) vez de count(1) (é por isso que você está recebendo apenas as linhas 1-COL)
  2. ActiveRecordMediator.ExecuteQuery (pelo menos em RC3) retorna um ArrayList (não um ICollection genérico) de object[]
  3. Seja cuidadoso resultados fundição count como int. Alguns bancos de dados retornar conta como long (por exemplo, SQL Server)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top