List<Person> list = new List<Person>();
list.Add(new Person() { Age = 20, Name = "Вася" });
list.Add(new Person() { Age = 21, Name = "Петя" });
list.Add(new Person() { Age = 23, Name = "Коля" });
list.Add(new Person() { Age = 18, Name = "Саша" });
string propertyName = "Age";
ParameterExpression parameterExpr =
Expression.Parameter(typeof(Person), "person");
Expression<Func<Person, object>> orderByExpr =
Expression.Lambda<Func<Person, object>>(
Expression.TypeAs(
Expression.Property(
parameterExpr, propertyName), typeof(object)), parameterExpr);
Func<Person, object> orderByFunc = orderByExpr.Compile();
List<Person> sorted = list.OrderByDescending(p => orderByFunc(p)).ToList();
Попробуйте так. По идее должно работать как в L2O, так и в L2S.