OrderBy(i => i.PropertyName).ThenBy(i => i.AnotherProperty)
В OrderBy и ThenBy вы должны предоставить функцию keySelector, которая выбирает ключ для сортировки по объекту.Поэтому, если вы знаете имя свойства только во время выполнения, вы можете создать такую функцию с помощью Reflection:
var propertyInfo = i.GetType().GetProperty("PropertyName");
var sortedList = myList.OrderBy(i => propertyInfo.GetValue(i, null))
Но это будет медленнее, чем прямой доступ к свойству.Также вы можете «скомпилировать» такую функцию на лету с Linq.Expressions, и она будет работать быстрее, чем отражение, но это не очень легко.Или вы можете использовать CollectionViewSource и их возможности сортировки в WPF.
И не забывайте, что OrderBy () возвращает отсортированный перечислимый, и он не сортирует ваш существующий список на месте.В вашем примере вы не сохранили отсортированный список в переменную.