Como eu aplico OrderBy em um IQueryable usando um nome de coluna de string em um método de extensão genérico?

public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName)
  where T : EntityObject
{
  var param = Expression.Parameter(typeof(T), "o");
  var body = Expression.PropertyOrField(param,columnName);

  var sortExpression = Expression.Lambda(body, param);
  return query.OrderBy(sortExpression);
}

Como o tipo de OrderBy não é inferido de sortExpression, preciso especificá-lo da seguinte forma em tempo de execução:

var sortExpression = Expression.Lambda<T, TSortColumn>(body, param);

Ou

return query.OrderBy<T, TSortColumn>(sortExpression);

Eu não acho que isso seja possível, no entanto, como TSortColumn só pode ser determinado durante o tempo de execução.

Existe uma maneira de contornar isso?

questionAnswers(8)

yourAnswerToTheQuestion