Consulta agregada con Castle ActiveRecord
-
10-07-2019 - |
Pregunta
Estoy tratando de realizar una consulta agregada simple que devuelve el resultado del agregado más una columna adicional. Esta publicación - > La consulta personalizada con Castle ActiveRecord tenía un buen ejemplo sobre cómo lograr esto, pero puedo Parece que no funciona. Parece que ActiveRecordMediator.ExecuteQuery devuelve una ArrayList de objetos (en lugar de ArrayList del objeto [], que es lo que esperaría). Además, si trato de enviarlo a ICollection, aparece un error de tiempo de ejecución quejándose de un lanzamiento no válido. Código a continuación, cualquier ayuda apreciada (no quiero usar SQL escrito a mano).
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]
};
La línea después de " del resumen en " es el que arroja la excepción de lanzamiento no válida.
(Olvidé mencionar: usando VS2008, .NET 3.5SP1, ActiveRecord 1.0RC3, NHibernate 1.2)
Solución
- Creo que te referías a
count (*)
en lugar decount (1)
(es por eso que solo obtienes filas de 1 col) - ActiveRecordMediator.ExecuteQuery (al menos en RC3) devuelve una
ArrayList
(no unaICollection
genérica) deobject[font><
- Tenga cuidado al convertir los resultados de
count
como int. Algunas bases de datos devuelven recuentos comolong
(por ejemplo, SQL Server)