Мне немного неясно, какова ваша настоящая цель, но для переключателя вы можете использовать метод расширения, как показано ниже.
public static class SortExtensions
{
public static IEnumerable<T> SortByField<T>(this IEnumerable<T> sequence, string sortOrder)
{
var tokens = sortOrder.Trim().Split(' ');
var field = tokens[0];
var direction = tokens.Skip(1).Single().ToLower();
var prop = typeof(T).GetProperty(field);
return direction == "desc"
? sequence.OrderByDescending(m => prop.GetValue(m, null))
: sequence.OrderBy(m => prop.GetValue(m, null));
}
}
Это сделает очень упрощенный анализ порядка сортировки. Это возлагает ответственность на вызывающую сторону, что, как правило, не то, что вы хотите сделать, поэтому вам может потребоваться некоторая обработка ошибок в случае, если строка сортировщика не соответствует требованиям.
из строки сортировщика выбирает имя, используемое для идентификации свойства, которое можно использовать для извлечения значения, используемого для сортировки.
Вы можете использовать это так:
db.TabMasters.SortByField(sortOrder)
РЕДАКТИРОВАТЬ на основе комментария:
Строка typeof (T) .GetProperty (field) является хрупкой в отсутствие какой-либо обработки ошибок. Он полагается, что первый токен будет именем открытого свойства типа T. Он вернет значение null, если имя не соответствует свойству. В том числе, если оно совпадает с именем поля. Аналогичная функция существует для получения FieldInfo
prop.GetField (field) вернет объект fieldinfo, в котором есть открытое поле с заданным именем, в противном случае null. Чтобы получить значение поля, просто опустите последний параметр в вызове GetValue.