windsor castle-activerecord

windsor - Consulta personalizada con Castle ActiveRecord



castle windsor (2)

Sin embargo, tenga en cuenta que si usa ActiveRecord 1.0.3 (RC3) como yo lo hice, esto dará como resultado un tiempo de ejecución InvalidCastException. ActiveRecordMediator.ExecuteQuery devuelve una ArrayList y no una ICollection genérica. Entonces, para que funcione, simplemente cambie esta línea:

var results = (ICollection<object[]>) ActiveRecordMediator.ExecuteQuery(query);

a

var results = (ArrayList) ActiveRecordMediator.ExecuteQuery(query);

y debería funcionar

También tenga en cuenta que el uso del recuento (1) en su declaración hql hará que la consulta devuelva ArrayList of String en lugar de ArrayList of object [] (que es lo que obtiene al usar count (*)).

Solo pensé en señalar esto por el bien de tener todo documentado en un solo lugar.

Estoy tratando de averiguar cómo ejecutar una consulta personalizada con Castle ActiveRecord.

Pude ejecutar una consulta simple que devuelve mi entidad, pero lo que realmente necesito es la siguiente consulta (con un conjunto de campos personalizados):

seleccione count (1) como cnt, datos de workstationevent donde serverdatetime> =: minDate y serverdatetime <: maxDate y userId = 1 group por datos que tienen count (1)>: threshold

¡Gracias!


En este caso, lo que quiere es HqlBasedQuery . Su consulta será una proyección, entonces lo que obtendrá será una ArrayList de tuplas que contienen los resultados (el contenido de cada elemento de ArrayList dependerá de la consulta, pero para más de un valor será object[] ) .

HqlBasedQuery query = new HqlBasedQuery(typeof(WorkStationEvent), "select count(1) as cnt, data from workstationevent where serverdatetime >= :minDate and serverdatetime < :maxDate and userId = 1 group by data having count(1) > :threshold"); var results = (ArrayList)ActiveRecordMediator.ExecuteQuery(query); foreach(object[] tuple in results) { int count = (int)tuple[0]; // = cnt string data = (string)tuple[1]; // = data (assuming this is a string) // do something here with these results }

Puede crear un tipo anónimo para mantener los resultados de una manera más significativa. Por ejemplo:

var results = from summary in (ArrayList)ActiveRecordMediator.ExecuteQuery(query) select new { Count = (int)summary[0], Data = (string)summary[1] };

Ahora los resultados contendrán una colección de tipos anónimos con propiedades Count and Data . O bien, podría crear su propio tipo de resumen y completarlo de esta manera también.

ActiveRecord también tiene ProjectionQuery que hace más o menos lo mismo, pero solo puede devolver las propiedades reales mapeadas en lugar de agregados o funciones como lo hace con HQL.