Наш код имеет SqlExpression, что на ее голую минимум что-то вроде:Исключение в OrmLite: Необходимо объявить скалярную переменную
var q = db.From<Users>();
q.Where(u => u.Age == 25);
totalRecords = db.Scalar<int>(q.ToCountStatement());
q.ToCountStatement() генерирует следующий запрос:
SELECT COUNT(*) FROM "Users" WHERE ("Age" = @0)
Однако db.Scalar() выдает исключение: Должен объявить скалярную переменную «@ 0». Это началось в последних версиях (протестировано в 4.0.54). Тот же код работал нормально до v4.0.50. Я проверил примечания к выпуску, но не смог найти соответствующее изменение.
Даже проходя параметр бросков же исключение:
totalRecords = db.Scalar<int>(q.ToCountStatement(), 25);
Является ли это ошибка, или мой надзор?
Во-вторых, можно получить q.ToCountStatement()
генерировать более оптимизированный запрос с COUNT(Age)
или COUNT([PrimaryKey])
вместо COUNT(*)
?
Как бы вы справиться с этим сценарием, где вы не знаете, что были добавлены PARAMS есть и ваше выражение запрос был построен динамически ? – James
@James Я не понимаю вопроса, который первый ответ показывает, используя типизированное выражение SQL, я также обновил свой ответ, чтобы показать, используя явные API-интерфейсы OrmLite, в то время как последний пример показывает использование параметризованного SQL. – mythz
Извините - я нашел то, что мне было нужно: conn.Scalar (query.ToCountStatement(), query.Params); –
James