Frage

Ich versuche, eine einfache Aggregatabfrage auszuführen, die das Aggregat Ergebnis sowie eine zusätzliche Spalte zurückgibt. Dieser Beitrag -> Benutzerdefinierte Abfrage mit Schloss Active ein gutes Beispiel über hatte, wie dies zu erreichen, scheint es, aber ich kann nicht bekommen zu arbeiten. Es scheint, dass ActiveRecordMediator.ExecuteQuery eine Arraylist von Objekten zurückgibt (anstelle von Arraylist des Objekts [] das ist, was ich erwarten würde). Auch wenn ich versuche, es zu ICollection zu werfen bekomme ich einen Laufzeitfehler Klagen von ungültigen Stimmen. Code unten, jede Hilfe dankbar (nicht will, handgeschriebene SQL verwenden).

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]
    };

Die Linie nach „aus Zusammenfassung in“ ist diejenige, die die ungültige Guss Ausnahme auslöst.

(vergessen zu erwähnen: using VS2008, .NET 3.5SP1, Active 1.0RC3, NHibernate 1.2)

War es hilfreich?

Lösung

  1. Ich glaube, Sie bedeuten count(*) statt count(1) (aus diesem Grunde sind Sie nur 1-col Reihen immer)
  2. ActiveRecordMediator.ExecuteQuery (zumindest in RC3) gibt einen ArrayList (keine Gattungs ICollection) von object[]
  3. Seien Sie vorsichtig Gießen count Ergebnisse als int. Einige Datenbanken zurückgeben zählen als long (zum Beispiel SQL Server)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top