“System.DateTime”类型的表达式不能用于返回类型“System.Object”

我创建了一个表达式,我正在使用它进行排序工作正常,直到我点击DateTime字段,我得到以下错误(在第二行):

“System.DateTime”类型的表达式不能用于返回类型“System.Object”

这是我的代码:

 ParameterExpression param = Expression.Parameter(typeof(MyEntity), "x"); Expression<Func> sortExpression = Expression.Lambda<Func>( Expression.Property(param, sortKey), param); 

任何人都可以帮忙吗?

只需在其中添加转化:

 Expression> sortExpression = Expression.Lambda>( Expression.Convert( Expression.Property(param, sortKey), typeof(object)), param); 

您似乎期望自动装箱值类型以匹配表达式的返回类型。 不幸的是, Expression.Lambda没有这样做。

您可以使用Expression.Convert执行装箱。

 var body = Expression.Convert(Expression.Property(param, sortKey), typeof(object)); var sortExpression = Expression.Lambda>(body, param); 

如果由于某种原因,如果属性已经是引用类型,则不希望转换操作出现在表达式中,您可以根据需要进行分支:

 Expression body = Expression.Property(param, sortKey); if(body.Type.IsValueType) body = Expression.Convert(body, typeof(object));