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

編集: 一部のデータベースは、count クエリに対して 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

これまでに与えられた回答のテストに基づいて、次のことがうまくいきました(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 に答える
0

質問に対する正確な答えではありませんが、推奨事項:自分でクエリを発行する手間を避けたい場合は、ActiveRecordMediator<T>.Count()(条件付きカウントが必要な場合は基準/フィルター文字列を取るオーバーロードがあります)とallintはすべてのデータベースに対して返されます。

于 2008-12-10T19:06:47.970 に答える