Вопрос

Я пытаюсь выполнить простой запрос агрегата, который возвращает результат агрегата плюс дополнительный столбец. Этот пост - > У пользовательского запроса с 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]
    };

Строка после " из сводки в " тот, который генерирует недопустимое исключение приведения.

(забыл упомянуть: использование VS2008, .NET 3.5SP1, ActiveRecord 1.0RC3, NHibernate 1.2)

Это было полезно?

Решение

<Ол>
  • Я думаю, что вы имели в виду count (*) вместо count (1) (именно поэтому вы получаете только строки по 1 столбцу)
  • ActiveRecordMediator.ExecuteQuery (по крайней мере, в RC3) возвращает ArrayList (не универсальный ICollection ) для объекта []
  • Будьте внимательны, передавая count результаты как int. Некоторые базы данных возвращают значения в виде long (например, SQL Server)
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top