Совокупный запрос с замком ActiveRecord - PullRequest
0 голосов
/ 08 мая 2009

Я пытаюсь выполнить простой запрос агрегата, который возвращает результат агрегата плюс дополнительный столбец. В этом посте -> Пользовательский запрос с Castle ActiveRecord был хороший пример того, как этого добиться, но я не могу заставить его работать. Кажется, что ActiveRecordMediator.ExecuteQuery возвращает ArrayList объектов (вместо 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)

1 Ответ

1 голос
/ 08 мая 2009
  1. Я думаю, что вы имели в виду count(*) вместо count(1) (именно поэтому вы получаете только строки по 1 столбцу)
  2. ActiveRecordMediator.ExecuteQuery (по крайней мере, в RC3) возвращает ArrayList (не универсальный ICollection) object[]
  3. Будьте внимательны, приведя count результаты как int. Некоторые базы данных возвращают значения как long (например, SQL Server)
...