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)

¿Fue útil?

Solución

  1. Creo que te referías a count (*) en lugar de count (1) (es por eso que solo obtienes filas de 1 col)
  2. ActiveRecordMediator.ExecuteQuery (al menos en RC3) devuelve una ArrayList (no una ICollection genérica) de object[font><
  3. Tenga cuidado al convertir los resultados de count como int. Algunas bases de datos devuelven recuentos como long (por ejemplo, SQL Server)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top