2010-08-07 60 views
2

我有以下代碼變換lambda表達式

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

並希望將其變換分析到

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

PersistentAttributeInfo在運行時只知道雖然

這可能嗎?

回答

4

如果PersistentAttributeInfo僅在運行時已知,那麼您顯然無法靜態編寫lambda,並讓編譯器爲您執行繁重的工作。你必須從頭開始創建一個新的:

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()返回一個代表就是類似於你的榜樣轉化lambda表達式(當然無類型)。

+0

令人印象深刻的工作...我玩了大約20分鐘,放棄了... – 2010-08-07 18:08:01