質問

集計の結果と追加の列を返す単純な集計クエリを実行しようとしています。この投稿-> 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を使用)

役に立ちましたか?

解決

  1. count(1)ではなく count(*)を意味すると思います(これが1列の行のみを取得する理由です)
  2. ActiveRecordMediator.ExecuteQuery(少なくともRC3で)は、 object []
  3. ArrayList (汎用の ICollection ではない)を返します。
  4. intとして count の結果をキャストする場合は注意してください。一部のデータベースは、カウントを long (例:SQL Server)
  5. として返します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top