consulta de agregação com Castle ActiveRecord
-
10-07-2019 - |
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)
Solução
- Eu acho que você quis
count(*)
vez decount(1)
(é por isso que você está recebendo apenas as linhas 1-COL) - ActiveRecordMediator.ExecuteQuery (pelo menos em RC3) retorna um
ArrayList
(não umICollection
genérico) deobject[]
- Seja cuidadoso resultados fundição
count
como int. Alguns bancos de dados retornar conta comolong
(por exemplo, SQL Server)