Получите исключение InvalidCast подсчета строк из ScalarQuery

ScalarQuery<int> query = new ScalarQuery<int>(typeof(Role), 
                         "select count(role.RoleId) from Role as role");
return query.Execute();

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

10.12.2008 11:51:50
4 ОТВЕТА
РЕШЕНИЕ

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

ScalarQuery<long> query = new ScalarQuery<long>(typeof(Role), 
                          "select count(r) from Role r");
return query.Execute();
1
10.12.2008 12:37:27

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

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

0
10.12.2008 12:06:34

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

0
10.12.2008 19:06:47

Основываясь на проверке ответов, данных на сегодняшний день, у меня сработало следующее (включая предложение 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
27.06.2010 13:23:12