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