转换表达,以表达>

问题描述:

我期待转化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

我写了一个简单的扩展方法来做到这一点,这不是很长,我只是想有一个简单的投

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); 
}