Notre code a une SqlExpression, qui, à son strict minimum est quelque chose comme:Exception dans OrmLite: doit déclarer la variable scalaire
var q = db.From<Users>();
q.Where(u => u.Age == 25);
totalRecords = db.Scalar<int>(q.ToCountStatement());
q.ToCountStatement() génère la requête suivante:
SELECT COUNT(*) FROM "Users" WHERE ("Age" = @0)
Cependant, db.Scalar() lève une exception: Doit déclarer la variable scalaire "@ 0". Cela a commencé à se produire dans les versions récentes (testé en 4.0.54). Le même code fonctionnait bien jusqu'à la version 4.0.0. J'ai vérifié les notes de version, mais je n'ai pas trouvé de changement lié.
passant Même un paramètre plaids la même exception:
totalRecords = db.Scalar<int>(q.ToCountStatement(), 25);
Est-ce un bug ou mon contrôle?
Deuxièmement, est-il possible d'obtenir q.ToCountStatement()
pour générer une requête plus optimisée avec COUNT(Age)
ou COUNT([PrimaryKey])
au lieu de COUNT(*)
?
Comment réagiriez-vous ce scénario où vous ne savez pas ce params ont été ajoutées et l'expression de votre requête a été construit de façon dynamique ? – James
@James Je ne comprends pas la question que la première réponse montre en utilisant une expression SQL typée, j'ai également mis à jour ma réponse pour montrer en utilisant les API Count explicites d'OrmLite alors que le dernier exemple montre l'utilisation de SQL paramétré. – mythz
Désolé - j'ai trouvé ce dont j'avais besoin: conn.Scalar (query.ToCountStatement(), query.Params); –
James