Вы можете использовать отражение (предполагается, что code
и name
являются свойствами; если они являются общедоступными переменными, вам придется соответственно изменить):
model = (sort.Direction == SortDirection.Ascending)
? model.OrderBy( x => x.GetType()
.GetProperty( sort.Column ).GetValue( x, null ) ) :
: model.OrderByDescending( x => x.GetType()
.GetProperty( sort.Column ).GetValue( x, null ) );
Как указывает Дунк в комментариях ниже, этот подход заставляет размышлять на каждом шаге перечисления, и размышление обходится дорого по мере выполнения операций. Если ваша коллекция однородна, вы можете добиться лучшей производительности, переместив отражение из перечисления. Если ваш model
содержит только элементов типа Foo
, вы можете сделать следующее:
var prop = typeof( Foo ).GetProperty( sort.Column );
model = (sort.Direction == SortDirection.Ascending)
? model.OrderBy( x => prop.GetValue( x, null ) ) :
: model.OrderByDescending( x => prop.GetValue( x, null ) );
Обратите внимание, что это приведет к TargetException
, если ваша коллекция не однородна.