Expression of type 'System.DateTime' cannot be used for return type 'System.Object'

前端 未结 2 975
小鲜肉
小鲜肉 2021-01-17 11:01

I\'ve created an expression that I\'m using for sorting which works fine, until I hit a DateTime field, where I get the following error (on the second line):

相关标签:
2条回答
  • 2021-01-17 11:34

    You appear to be expecting auto-boxing of value-types to match the return-type of the expression. Unfortunately, Expression.Lambda does not do this.

    You can use Expression.Convert to perform the boxing.

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

    If for some reason you don't want the conversion operation to be present in the expression if the property is already a reference-type, you can branch as required:

    Expression body = Expression.Property(param, sortKey);
    
    if(body.Type.IsValueType)
       body = Expression.Convert(body, typeof(object));
    
    0 讨论(0)
  • 2021-01-17 11:42

    Just add a conversion in there:

    Expression<Func<MyEntity, object>> sortExpression =
        Expression.Lambda<Func<AMyEntity, object>>(
            Expression.Convert(
                Expression.Property(param, sortKey),
                typeof(object)),
            param);
    
    0 讨论(0)
提交回复
热议问题