How to convert a LambdaExpression to typed Expression<Func<T, T>>

.net, c#, casting, lambda, linq-expressions

Solution

var typedExpression =
    (Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails

This is not surprising, as you have to `Compile` a `LambdaExpression` in order to get an actual delegate that can be invoked (which is what `Func<T, bool>` is).

So this would work, but I 'm not sure if it is what you need:

// This is no longer an expression and cannot be used with IQueryable
var myDelegate =
    (Func<T, bool>)
    Expression.Lambda(funcType, itemPredicate, parameter).Compile();

If you are not looking to compile the expression but instead to move an expression tree around, then the solution is to instead cast to an `Expression<Func<T, bool>>`:

var typedExpression = (Expression<Func<T, bool>>) 
                      Expression.Lambda(funcType, itemPredicate, parameter);

Problem

I'm dynamically building linq queries for nHibernate. Due to dependencies, I wanted to cast/retrieve the typed expression at a later time, but I have been unsuccessfull so far. This is not working (the cast is supposed to happen elsewhere): ``` var funcType = typeof (Func<,>).MakeGenericType(entityType, typeof (bool)); var typedExpression = (Func<T, bool>)Expression.Lambda(funcType, itemPredicate, parameter); //Fails ``` This is working: ``` var typedExpression = Expression.Lambda<Func<T, bool>>(itemPredicate, parameter); ``` Is it possible to get the 'encapsulated' typed expression from a LambdaExpression?

Original source