Получите исключение InvalidCast подсчета строк из ScalarQuery - PullRequest
1 голос
/ 10 декабря 2008
ScalarQuery<int> query = new ScalarQuery<int>(typeof(Role), 
                         "select count(role.RoleId) from Role as role");
return query.Execute();

Сбой с исключением invalidcast, но успешно, если счетчик заменен на max.

Ответы [ 4 ]

1 голос
/ 10 декабря 2008

Редактировать : Некоторые базы данных возвращают длинные для запросов на подсчет. Например SQL Server.

ScalarQuery<long> query = new ScalarQuery<long>(typeof(Role), 
                          "select count(r) from Role r");
return query.Execute();
0 голосов
/ 27 июня 2010

На основании тестирования ответов, данных на сегодняшний день, у меня сработало следующее (включая предложение where):

// Option 1
int result = ActiveRecordMediator<Post>.Count("BlogId = ?", blogId);

// Option 2
CountQuery query = new CountQuery(typeof(Post), "BlogId = ?", blogId);
int result = ActiveRecordMediator.ExecuteQuery(query);

// Option 3
ScalarQuery<long> query= new ScalarQuery<long>(typeof(Post),
  "SELECT COUNT(*) FROM Post WHERE BlogId = ?", blogId);
long result = query.Execute();
0 голосов
/ 10 декабря 2008

Не совсем ответ на вопрос, но рекомендация: если вы хотите избежать проблем с выполнением запроса вообще, просто используйте ActiveRecordMediator<T>.Count() (с перегрузками, которые принимают критерии / строки фильтра, если вы требуется условный счет) и все возвращают int для всех баз данных.

0 голосов
/ 10 декабря 2008

Какую базу данных вы используете? Может быть, что count не возвращает int.

Вы также можете попробовать использовать http://api.castleproject.org/html/T_Castle_ActiveRecord_Queries_CountQuery.htm

...