Obtenir Row Count InvalidCast Exception de ScalarQuery
-
21-08-2019 - |
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.
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();