0

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

「from summary in」の後の行は、無効なキャスト例外をスローする行です。

(言及するのを忘れました: VS2008、.NET 3.5SP1、ActiveRecord 1.0RC3、NHibernate 1.2 を使用)

4

1 に答える 1

1
  1. 私はあなたがcount(*)代わりに意味したと思いますcount(1)(これがあなたが1列の行しか得られない理由です)
  2. ActiveRecordMediator.ExecuteQuery(少なくともRC3では)はArrayList(ジェネリックではなくICollectionobject[]
  3. count結果をintとしてキャストする場合は注意してください。一部のデータベースは、カウントを次のように返しますlong(SQL Serverなど)
于 2009-05-08T03:43:40.420 に答える