Создать универсальное выражение из имени свойства строки

У меня есть переменная с именем sortColumn, которая содержит текст столбца, по которому я хочу отсортировать результат запроса. У меня также есть общий репозиторий, который принимает в качестве параметра выражение, которое содержит поле, по которому я хочу отсортировать. Я могу'Кажется, из имени свойства строки получается выражение.

Таким образом, общий репозиторий, который у меня есть, содержит следующий метод

public IEnumerable Get(Expression criteria,
                                          Expression orderBy, int pageIndex,
                                          int pageSize,
                                          bool isAssendingOrder = true,
                                          EnumDeletePolicy deletePolicy = EnumDeletePolicy.ExcludeDeleted)

Обратите внимание, что вторым параметром для этого Get является Expression-Func-TEntity, TOrderBy. Как я уже упоминал, у меня есть переменная sortColumn, которая содержит строку для свойства моего объекта TEntity. Мне нужно преобразовать эту строку в выражение, которое я могу передать в метод Get.

Вот что у меня сейчас.

        var parameter = Expression.Parameter(typeof(IContract));
        var memberExpression = Expression.Property(parameter, data.SortColumn);
        var lambdaExpression = Expression.Lambda(memberExpression, parameter);

Который создает объект типа LambdaExpression. Фактическим типом этого LambdaExpression является Expression-Func-IContract, строка (или любой другой тип sortColumn свойства). Если я вызову метод Get, передам это LambdaExpression и явно приведу его к типу Expression, тогда он будет работать нормально. Проблема в том, что я неНе знаю, что такое тип Expression, это может быть строка, int, int? и т. д. Все зависит от типа свойства, определенного в свойстве sortColumn.

Можете ли вы помочь мне сделать последний прыжок на правильный тип выражения?

Редактировать на основе Marc 's предложения: у меня почти есть эта работа, фактически основанная конкретно на вопросе, который она работает, но у меня есть 1 остающаяся проблема.

IContract, который является Типом сущности, который яЯ на самом деле наследую от IRelationship. Если я указываю поле из интерфейса IContract, то приведенный выше код работает. Если я укажу поле из интерфейса IRelationship, следующая строка завершится неудачно.

        var memberExpression = Expression.Property(parameter, data.SortColumn);

Если я попробую что-то вроде ниже, чтобы яЯ извлекаю выражение MemberExpression из IRelationship, но при построении лямбды на основе IContract я получаю сообщение об ошибке из репозитория.

        var parameter = Expression.Parameter(typeof(IRelationship));
        var memberExpression = Expression.Property(parameter, data.SortColumn);
        var orderBy = Expression.Lambda(memberExpression, Expression.Parameter(typeof(IContract)));

Ошибка, которую я получаю:Параметр '' не был связан в указанном выражении запроса LINQ to Entities. "

Последнее выражение, чтобы заставить его работать, было это

        var parameter = Expression.Parameter(typeof(IContract));
        var memberExpression = Expression.Property(parameter, typeof(IRelationship), data.SortColumn);
        var orderBy = Expression.Lambda(memberExpression, parameter);

Поэтому мне нужно было указать средний параметр в строке memberExpression, чтобы сказать, посмотрите в унаследованном интерфейсе Relationship для свойства

Ответы на вопрос(1)

Ваш ответ на вопрос