Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LINQ Expression Conversion / Concat from Int to string

I want to Concat two expressions for the final expression

Expression<Func<T, string>>

So I have created expression belwo code works fine for only string types , If I get memberExpression as Int32 or DateTime throwing exception

Expression of type 'System.Int32' cannot be used for parameter of type 'System.String' of method 'System.String Concat(System.String, System.String)'

If I convert the expression as

var conversion = Expression.Convert(memberExpression, typeof (string));

getting No coercion operator is defined between types 'System.Int32' and 'System.String'.

Please help me to resolve

Code

MethodInfo bodyContactMethod = typeof (string).GetMethod("Concat",new[] {typeof (string), typeof (string)});

ParameterExpression parameter = Expression.Parameter(typeof (T));

body = Expression.Call(bodyContactMethod, cons, memberExpression);

return Expression.Lambda<Func<T, string>>(body, parameter);
like image 906
ineffable p Avatar asked Jul 25 '13 15:07

ineffable p


1 Answers

Instead of trying to cast to string, you could try casting to object then calling ToString(), as though you were doing:

var converted = member.ToString();

As an Expression, it will look something like this:

var convertedExpression = Expression.Call(
                     Expression.Convert(memberExpression, typeof(object)),
                     typeof(object).GetMethod("ToString"));
like image 100
Jon G Avatar answered Nov 04 '22 21:11

Jon G