Question

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

Il échoue à l'exception de invalidcast mais réussit lorsque le nombre est remplacé par max.

Était-ce utile?

La solution

Modifier : Certaines bases de données pour les requêtes à long retour de comptage. Par exemple SQL Server.

ScalarQuery<long> query = new ScalarQuery<long>(typeof(Role), 
                          "select count(r) from Role r");
return query.Execute();

Autres conseils

Qu'est-ce que la base de données utilisez-vous? Peut-être que le nombre ne renvoie pas d'int.

Votre pourrait également essayer d'utiliser http://api.castleproject.org/html/T_Castle_ActiveRecord_Queries_CountQuery. htm

Pas exactement la réponse à la question, mais une recommandation: si vous voulez éviter les tracas d'avoir à émettre une requête du tout vous-même, il suffit d'utiliser ActiveRecordMediator<T>.Count() (qui a des critères qui prennent les surcharges / chaînes de filtre si vous veulent un décompte conditionnel) et tout retour contre toutes les bases de données int.

D'après les tests les réponses données à ce jour, ce qui suit a fonctionné pour moi (y compris une clause 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top