2010-08-07 5 views
2

я следующий кодпреобразовать лямбда-выражение

Expression<Func<IPersistentAttributeInfo, bool>> expression = info => info.Owner== null; 

и хотите tranform его

Expression<Func<PersistentAttributeInfo, bool>> expression = info => info.Owner== null; 

PersistentAttributeInfo только известен во время выполнения, хотя

Возможно ли это?

ответ

4

Если PersistentAttributeInfo известно только во время выполнения, вы, очевидно, не можете писать лямбда статически и укомплектовать компилятор для тяжелого подъема. Вы должны создать новый с нуля:

Type persistentAttributeInfoType = [TypeYouKnowAtRuntime]; 
ParameterExpression parameter = Expression.Parameter(persistentAttributeInfoType, "info"); 
LambdaExpression lambda = Expression.Lambda(
    typeof(Func<,>).MakeGenericType(persistentAttributeInfoType, typeof(bool)), 
    Expression.Equal(Expression.Property(parameter, "Owner"), Expression.Constant(null)), 
    parameter); 

Вы можете вызвать lambda.Compile() для возврата делегата, который аналогично преобразованной лямбда-выражения в вашем примере (хотя, конечно, нетипизированным).

+0

Впечатляющая работа ... Я играл с ним около 20 минут и сдался ... –

Смежные вопросы