转换表达,以表达>
问题描述:
我期待转化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>
toExpression<Func<TEntity, Object>>
有没有一种简单的方法,以这两种类型之间的转换
答
我写了一个简单的扩展方法来做到这一点,这不是很长,我只是想有一个简单的投
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);
}
这包括创建一个全新的表达方式,这是一个有点复杂,如果'TKey'能是一种价值类型。但是如果可能的话,我会说'PropertyMetadata'应该有一个方法来允许从'Expression>'构造。这是你自己的一类吗?如果是这样,是否可以修改? –
hvd
@ hvd它不能采用tkey类型,因为它是可在类型中搜索的属性的白名单。所以有多种类型的tkey。当我用手写它时,它会自动在我的表情中创建一个音乐会 –
我明白这一点。但是你可以拥有一个私有的构造函数,通过一个普通的'PropertyMetadata。创建(表达式>表达式)'调用'表达式表达式'。这允许多个属性类型用于相同的'PropertyMetadata '。 –
hvd