Aggregatabfrage mit Schloss Active
-
10-07-2019 - |
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)
Lösung
- Ich glaube, Sie bedeuten
count(*)
stattcount(1)
(aus diesem Grunde sind Sie nur 1-col Reihen immer) - ActiveRecordMediator.ExecuteQuery (zumindest in RC3) gibt einen
ArrayList
(keine GattungsICollection
) vonobject[]
- Seien Sie vorsichtig Gießen
count
Ergebnisse als int. Einige Datenbanken zurückgeben zählen alslong
(zum Beispiel SQL Server)