Как применить OrderBy к IQueryable, используя имя столбца строки в общем методе расширения?

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);
}

Поскольку тип для OrderBy не выводится из sortExpression, мне нужно указать его примерно так во время выполнения:

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

Или же

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

Я не думаю, что это возможно, однако, поскольку TSortColumn может быть определен только во время выполнения.

Это можно обойти?

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

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