Делаю лямбда-выражение LINQ:оценить выражение LambdaExpression?
Expression<Func<double, double, double>> add = (x, y) => x + y;
Но теперь, как бы я оцениваю его, скажем, найти 2 + 3?
Делаю лямбда-выражение LINQ:оценить выражение LambdaExpression?
Expression<Func<double, double, double>> add = (x, y) => x + y;
Но теперь, как бы я оцениваю его, скажем, найти 2 + 3?
Это должно работать для вас:
var sum = add.Compile()(2,3);
Существует некоторый случай, ваш Expression
не имеет общего типа, вы должны использовать DynamicInvoke
, чтобы выполнить его, потому что Compile()
затем возвращает Delegate
:
someNonGenericExpression.Compile().DynamicInvoke(2,3);
В общем, если вы просто хотите, чтобы оценили лямбда, не используйте Expression<T>
, а просто используйте свою лямбда для определения Func<T>
непосредственно:
Func<double, double, double> add = (x, y) => x + y;
double result = add(42.2, 52.1);
Если у вас есть Expression<T>
уже по другим причинам, и необходимо оценить его, вы можете использовать Expression<T>.Compile
, чтобы преобразовать его в качестве делегата:
Expression<Func<double, double, double>> add = (x, y) => x + y;
var asDelegate = add.Compile();
double result = asDelegate(42.2, 52.1);
Expression.Compile()
будет скомпилировать выражение в функция/действие. Сделайте это, а затем вызовите метод.
Expression<Func<double, double, double>> add = (x, y) => x + y;
Func<double, double, double> addFunc = add.Compile();
double result = addFunc(2, 3);
Вы действительно хотите представить это выражение Linq? Вы можете оценить 'Func' just fine самостоятельно. –