【发布时间】:2017-09-04 16:35:29
【问题描述】:
我希望将Expression<Func<TEntity,TKey> 转换为Expression<Func<TEntity, Object>>
因为一切都是对象,所以我尝试了这样的隐式转换:
var propertyMetadata =
new PropertyMetadata<TEntity>((Expression<Func<TEntity, object>>)expression);
但这会产生错误:
无法将类型
Expression<Func<TEntity,TKey>转换为Expression<Func<TEntity, Object>>
有没有一种简单的方法可以在这两种类型之间进行转换
【问题讨论】:
-
这涉及到创建一个全新的表达式,如果
TKey可以是一个值类型,那就有点复杂了。但如果可能的话,我会说PropertyMetadata应该有一种方法允许从Expression<Func<TEntity, TKey>>构造。这是你自己的课吗?如果有,是否开放修改? -
@hvd 它不能接受 tkey 类型,因为它是类型中可搜索属性的白名单。所以有多种类型的tkey。当我手写它时,它会自动在我的表情中创建一个音乐会
-
我明白这一点。但是您可以拥有一个私有构造函数,该构造函数采用由通用
PropertyMetadata<TEntity>.Create<TKey>(Expression<Func<TEntity, TKey>> expression)调用的Expression expression。这允许同一PropertyMetadata<TEntity>的多个属性类型。 -
是的,但即使使用构造函数,我仍然需要进行强制转换,因为表达式在变量中
-
嗯?我提议
var propertyMetadata = PropertyMetadata<TEntity>.Create(expression);,不需要演员表,因为它会直接接受表达式。
标签: c# expression