ScalarQuery<int> query = new ScalarQuery<int>(typeof(Role),
"select count(role.RoleId) from Role as role");
return query.Execute();
它因 invalidcast 异常而失败,但在将 count 替换为 max 时成功。
ScalarQuery<int> query = new ScalarQuery<int>(typeof(Role),
"select count(role.RoleId) from Role as role");
return query.Execute();
它因 invalidcast 异常而失败,但在将 count 替换为 max 时成功。
编辑:某些数据库将返回 long 进行计数查询。例如 SQL 服务器。
ScalarQuery<long> query = new ScalarQuery<long>(typeof(Role),
"select count(r) from Role r");
return query.Execute();
你用的是什么数据库?可能是 count 不返回 int。
您也可以尝试使用http://api.castleproject.org/html/T_Castle_ActiveRecord_Queries_CountQuery.htm
不完全是问题的答案,而是一个建议:如果您想避免自己不得不发出查询的麻烦,那么只需使用ActiveRecordMediator<T>.Count()
(如果您想要条件计数,它具有采用标准/过滤字符串的重载)和all 返回int
所有数据库。
根据对迄今为止给出的答案的测试,以下内容对我有用(包括 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();