Castle ActiveRecordを使用した集計クエリ
-
10-07-2019 - |
質問
集計の結果と追加の列を返す単純な集計クエリを実行しようとしています。この投稿-> Castle ActiveRecordを使用したカスタムクエリには、これを実現する方法についての良い例がありましたが、それが機能するようには思われない。 ActiveRecordMediator.ExecuteQueryはオブジェクトのArrayListを返すようです(object []のArrayListの代わりに)。また、ICollectionにキャストしようとすると、無効なキャストを訴えるランタイムエラーが発生します。以下のコード、助けがあれば感謝します(手書きのsqlを使用したくない)。
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]
};
&quot; from summary in&quot;の後の行無効なキャスト例外をスローするものです。
(言及するのを忘れた:VS2008、.NET 3.5SP1、ActiveRecord 1.0RC3、NHibernate 1.2を使用)
解決
-
count(1)
ではなくcount(*)
を意味すると思います(これが1列の行のみを取得する理由です) - ActiveRecordMediator.ExecuteQuery(少なくともRC3で)は、
object []
の - intとして
count
の結果をキャストする場合は注意してください。一部のデータベースは、カウントをlong
(例:SQL Server) として返します
ArrayList
(汎用の ICollection
ではない)を返します。
所属していません StackOverflow