Query aggregata con Castle ActiveRecord
-
10-07-2019 - |
Domanda
Sto cercando di eseguire una semplice query aggregata che restituisce il risultato dell'aggregato più una colonna aggiuntiva. Questo post - > La query personalizzata con Castle ActiveRecord ha fornito un buon esempio su come raggiungere questo obiettivo, ma posso sembra farlo funzionare. Sembra che ActiveRecordMediator.ExecuteQuery restituisca una ArrayList di oggetti (anziché ArrayList di object [] che è quello che mi aspetterei). Inoltre, se provo a inviarlo a ICollection, ricevo un errore di runtime che si lamenta di un cast non valido. Codice di seguito, qualsiasi aiuto apprezzato (non voglio usare sql scritto 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 riga dopo " dal riepilogo in " è quello che genera l'eccezione di cast non valida.
(Hai dimenticato di menzionare: utilizzando VS2008, .NET 3.5SP1, ActiveRecord 1.0RC3, NHibernate 1.2)
Soluzione
- Penso che volevi dire
count (*)
invece dicount (1)
(ecco perché stai ottenendo solo righe da 1 col) - ActiveRecordMediator.ExecuteQuery (almeno in RC3) restituisce un
ArrayList
(non unICollection
generico) dioggetto vincolato
- Fai attenzione a lanciare i risultati
count
come int. Alcuni database restituiscono conteggi comelong
(ad esempio SQL Server)