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

它因 invalidcast 异常而失败,但在将 count 替换为 max 时成功。

4

4 回答 4

1

编辑:某些数据库将返回 long 进行计数查询。例如 SQL 服务器。

ScalarQuery<long> query = new ScalarQuery<long>(typeof(Role), 
                          "select count(r) from Role r");
return query.Execute();
于 2008-12-10T12:03:26.593 回答
0

你用的是什么数据库?可能是 count 不返回 int。

您也可以尝试使用http://api.castleproject.org/html/T_Castle_ActiveRecord_Queries_CountQuery.htm

于 2008-12-10T12:06:34.043 回答
0

不完全是问题的答案,而是一个建议:如果您想避免自己不得不发出查询的麻烦,那么只需使用ActiveRecordMediator<T>.Count()(如果您想要条件计数,它具有采用标准/过滤字符串的重载)和all 返回int所有数据库。

于 2008-12-10T19:06:47.970 回答
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();
于 2010-06-27T13:23:12.690 回答