Я один из разработчиков LightSpeed.
Поставщик LINQ в LightSpeed 3.11 RTM не поддерживает Convert.ToInt32.Однако теперь мы добавили поддержку через ночной выпуск, который доступен для загрузки.
Если вы не хотите использовать ночной выпуск, вы можете достичь желаемого результата, перейдя в API-интерфейс Query Objects.и вызывая функцию SQL CAST напрямую.Это будет выглядеть примерно так:
Query query = new Query
{
Order = Order.By(Entity.Attribute("Number")
.Function("CAST", new LiteralExpression("INTEGER") { EmitInline = true }))
};
uow.Find<RfidTag>(query);
Причина довольно многословного выражения LiteralExpression для типа приведения заключается в том, что по умолчанию LightSpeed отправляет значения в базу данных через параметры (чтобы избежать атак с использованием SQL-инъекций).Но для функции CAST движок SQL должен видеть CAST(Number, INTEGER)
, а не CAST(Number, @p0)
, где p0 имеет значение «INTEGER».Таким образом, вы должны использовать выражение EmitInline, которое обходит параметризацию, а не более естественный строковый литерал.
Еще раз, однако, ночной выпуск поддерживает Convert.ToInt32 в LINQ, поэтому вам нужно только перейти кэтот уровень, если вы хотите избежать ночной сборки.