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)

È stato utile?

Soluzione

  1. Penso che volevi dire count (*) invece di count (1) (ecco perché stai ottenendo solo righe da 1 col)
  2. ActiveRecordMediator.ExecuteQuery (almeno in RC3) restituisce un ArrayList (non un ICollection generico) di oggetto vincolato
  3. Fai attenzione a lanciare i risultati count come int. Alcuni database restituiscono conteggi come long (ad esempio SQL Server)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top