Вы должны иметь возможность построить выражение из имени этого свойства и передать его в OrderBy:
public IEnumerable<MyData> orderByDynamic(IEnumerable<MyData> objects, string propertyName)
{
var parameterExpression = Expression.Parameter(typeof(MyData), "x");
var orderByExpression = Expression.Lambda<Func<MyData, TypeOfProperty>>(
Expression.Property(parameterExpression, propertyName),
parameterExpression);
return objects.OrderBy(orderByExpression)
}
Проблема в том, что вам нужно знать тип свойства во время компиляции, чтобы это работало.