Criar expressão genérica a partir do nome da propriedade da string

Eu tenho uma variável chamada sortColumn, que contém o texto de uma coluna que eu quero classificar um resultado de consulta por. Eu também tenho um repositório genérico que toma como parâmetro uma expressão que contém o campo que eu quero classificar. Não consigo obter do nome da propriedade da string para uma expressão.

Então, o repositório genérico que eu tenho contém o seguinte método

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

Observe o segundo parâmetro para este Get é Expression-Func-TEntity, TOrderBy. Como mencionei, eu tenho uma variável chamada sortColumn, que contém a string para uma propriedade no meu objeto TEntity. Eu preciso converter essa string em uma Expression que eu possa passar para o método Get.

Aqui está o que eu tenho agora.

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

Que cria um objeto do tipo LambdaExpression. O tipo real dessa LambdaExpression é uma string Expression-Func-IContract (ou qualquer que seja o tipo sortColumn da propriedade). Se eu chamar o método Get e passar esse LambdaExpression e convertê-lo explicitamente no tipo Expression, ele funcionará bem. O problema é que eu não sei o que é o tipo de expressão, poderia ser uma string, int, int ?, etc. Tudo depende do tipo de propriedade que é específico na propriedade sortColumn.

Você pode me ajudar a fazer este último salto para o tipo de expressão correto?

Editar com base nas sugestões de Marc: Eu quase tenho este trabalho, na verdade baseado especificamente na questão que está trabalhando, mas eu tenho um problema remanescente.

O IContract que é o tipo de entidade que estou consultando realmente herda de IRelationship. Se eu especificar um campo da interface IContract, o código acima funcionará. Se eu especificar um campo da interface IRelationship, a seguinte linha falhará.

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

Se eu tentar algo como abaixo, de modo que estou pegando o MemberExpression da IRelationship, mas construindo o Lambda com base no IContract, recebo um erro do repositório.

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

O erro que recebo é "O parâmetro '' não foi vinculado na expressão de consulta LINQ to Entities especificada."

A expressão final para fazê-lo funcionar foi este

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

Então, eu precisava especificar o parâmetro do meio para a linha memberExpression, para dizer procurar na interface de relacionamento herdada da propriedade

questionAnswers(1)

yourAnswerToTheQuestion