var vars = {};
var var_name = "str";
vars[var_name] = "working";
console.log(vars["str"]);
Следующее должно работать, в основном создавая функцию, извлекающую поле сортировки из формы и использующую его в операциях Linq.
Обратите внимание, что вы могли бы использовать более строго типизированный func, если бы поля сортировки были, например, все строки.
Func<Form, object> sortFieldGetter = null;
switch (command.SortProperty.ToLower())
{
case "number":
sortFieldGetter = form => (object)form.NumberForSort;
break;
case "type":
sortFieldGetter = form => (object)form.Type;
break;
case "employeename":
sortFieldGetter = form => (object)form.EmployeeName;
break;
...
}
if (command.OrderProperty.ToLower().Equals("asc"))
{
accessForms.Forms = accessForms.Forms.OrderBy(sortFieldGetter).ToList();
}
else
{
accessForms.Forms = accessForms.Forms.OrderByDescending(sortFieldGetter).ToList();
}
Используя код @rob, написанный здесь здесь , в вашем случае итоговый код может выглядеть следующим образом:
accessForms.Forms = command.OrderProperty.ToLower().Equals("asc")) ?
accessForms.Forms.OrderBy(command.SortProperty.ToLower()).ToList() :
accessForms.Forms.OrderByDescending(command.SortProperty.ToLower()).ToList();
Обратите внимание, что вам нужно реализовать собственный OrderByDescending, которого нет оригинальный код.
Я согласен, что этот вопрос лучше подходит для Code Review.
В любом случае вы можете сделать что-то вроде этого:
Шаг 1: Создать метод (ы) расширения
public static IQueryable<T> SortByField<T, TKey>(this IQueryable<T> source, Expression<Func<T, TKey>> selector, bool ascending = true)
{
return ascending ? source.OrderBy(selector) : source.OrderByDescending(selector);
}
public static IQueryable<T> SortByField<T, TKey>(this IQueryable<T> source, Expression<Func<T, TKey>> selector, string order = "asc")
{
return SortByField(source, selector, order.Equals("asc", StringComparison.OrdinalIgnoreCase)); //condition here can be improved, just as a sample of how to do it
}
Шаг 2: Наслаждайтесь:
var samples = new List<Sample>().AsQueryable(); //you can of course use LINQ to SQL or EF, but I am lazy
samples.SortByField(t => t.NumberForSort, false); //or "asc"
Я думаю, что улучшение вашего объекта «команда» / запрос поможет очистить код.
Рэнт: «Дело» является для меня последним средством, оно почти всегда означает, что есть как минимум два места, где я должен изменить код, которые не всегда могут находиться в одной сборке, и почти во всех случаях слова «case» можно заменить на словарь или шаблон «Strategy».