2017-09-04 91 views
0

我期待轉化Expression<Func<TEntity,TKey>Expression<Func<TEntity, Object>>轉換表達<Func鍵<TEntity,TKEY的>,以表達<Func鍵<TEntity,對象>>

作爲一切都是一個對象,我想隱式轉換,如下所示:

var propertyMetadata = 
    new PropertyMetadata<TEntity>((Expression<Func<TEntity, object>>)expression); 

然而,創建一個錯誤:

Cannot Convert Type Expression<Func<TEntity,TKey> to Expression<Func<TEntity, Object>>

有沒有一種簡單的方法,以這兩種類型之間的轉換

+0

這包括創建一個全新的表達方式,這是一個有點複雜,如果'TKey'能是一種價值類型。但是如果可能的話,我會說'PropertyMetadata'應該有一個方法來允許從'Expression >'構造。這是你自己的一類嗎?如果是這樣,是否可以修改? – hvd

+0

@ hvd它不能採用tkey類型,因爲它是可在類型中搜索的屬性的白名單。所以有多種類型的tkey。當我用手寫它時,它會自動在我的表情中創建一個音樂會 –

+0

我明白這一點。但是你可以擁有一個私有的構造函數,通過一個普通的'PropertyMetadata 。創建(表達式>表達式)'調用'表達式表達式'。這允許多個屬性類型用於相同的'PropertyMetadata '。 – hvd

回答

0

我寫了一個簡單的擴展方法來做到這一點,這不是很長,我只是想有一個簡單的投

public static Expression<Func<TInput, object>> ToObjectExpression<TInput, TOutput> 
             (this Expression<Func<TInput, TOutput>> expression) 
{ 
    Expression converted = Expression.Convert(expression.Body, typeof(object)); 
    return Expression.Lambda<Func<TInput, object>>(converted, expression.Parameters); 
} 
相關問題