linq order by with Expression

0

I want to use sorting with linq. From parameter name I am getting back sorting

Code:

private static Expression<Func<T, object>> CreateOrderPredicate2<T>(string member)
        {
            member = member.FirstLetterToUpper();
            var propertyInfo = typeof(T).GetProperty(member);

            if (propertyInfo == null)
            {
                throw new ArgumentException($"Property '{member}' not found on type {typeof(T)}");
            }

            ParameterExpression parameter = Expression.Parameter(typeof(T), "x");
            Expression<Func<T, object>> lambda = Expression.Lambda<Func<T, object>>(Expression.Convert(Expression.Property(parameter, propertyInfo),typeof(object)), parameter);

            return lambda;
        }

then I am reading this

Expression<Func<MarketVolumeChange, object>> expression = orderExpression.Key;

switch (orderExpression.Value)
                    {
                        case Ordering.Asc:
                            changeQuery = changeQuery.OrderBy(expression);
                            break;
                        case Ordering.Desc:
                            changeQuery = changeQuery.OrderByDescending(expression);
                            break;
                        default:
                            throw new ArgumentOutOfRangeException();
                    }

and then I get error

System.NotSupportedException occurred HResult=0x80131515
Message=Unable to cast the type 'System.DateTime' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types. Source= StackTrace:

Problem is that I know parameter name but not a type that way I am using Object in CreateOrderPredicate2 method

Is there a possibility to detect parameter type also?

c#
linq
asked on Stack Overflow Nov 19, 2017 by senzacionale

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0