Ответ 1
var typedExpression =
(Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails
Это неудивительно, поскольку вы должны Compile
a LambdaExpression
, чтобы получить фактический делегат, который может быть вызван (что является тем, что Func<T, bool>
is).
Итак, это сработает, но я не уверен, что это то, что вам нужно:
// This is no longer an expression and cannot be used with IQueryable
var myDelegate =
(Func<T, bool>)
Expression.Lambda(funcType, itemPredicate, parameter).Compile();
Если вы не хотите компилировать выражение, а вместо этого перемещать дерево выражений, то вместо этого вместо него следует использовать Expression<Func<T, bool>>
:
var typedExpression = (Expression<Func<T, bool>>)
Expression.Lambda(funcType, itemPredicate, parameter);