ScalarQuery<int> query = new ScalarQuery<int>(typeof(Role),
select count(role.RoleId) from Role as role);
return query.Execute();
Ele falha com a exceção InvalidCast mas sucede quando a contagem é substituído com máx.
ScalarQuery<int> query = new ScalarQuery<int>(typeof(Role),
select count(role.RoleId) from Role as role);
return query.Execute();
Ele falha com a exceção InvalidCast mas sucede quando a contagem é substituído com máx.
Editar : Alguns bancos de dados irá retornar tempo para consultas de contagem. Por exemplo SQL Server.
ScalarQuery<long> query = new ScalarQuery<long>(typeof(Role),
"select count(r) from Role r");
return query.Execute();
O banco de dados você está usando? Pode ser que a contagem não retorna um int.
Seu também pode tentar usar http://api.castleproject.org/html/T_Castle_ActiveRecord_Queries_CountQuery.htm
Não é exatamente a resposta para a pergunta, mas uma recomendação: se você quiser evitar o aborrecimento de ter de emitir uma consulta em tudo mesmo, então é só usar ActiveRecordMediator<T>.Count()
(que tem sobrecargas que levam critérios / seqüências de filtro, se você quiser uma contagem condicional) e tudo voltar int
contra todos os bancos de dados.
Com base em testes as respostas dadas até à data, a seguinte trabalhou para mim (incluindo uma cláusula onde):
// 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();