преобразовать лямбда-выражение - PullRequest
2 голосов
/ 07 августа 2010

У меня есть следующий код

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

и я хочу преобразовать его в

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

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

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

1 Ответ

4 голосов
/ 07 августа 2010

Если 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 (), чтобы вернуть Delegate, который аналогичен преобразованному лямбда-выражению в вашем примере (хотя, конечно, нетипизировано).

...