从ScalarQuery获取行计数InvalidCast异常

时间:2008-12-10 11:51:51

标签: hql castle-activerecord

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

失败时出现invalidcast异常,但是当count替换为max时成功。

4 个答案:

答案 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();