Можно ли сделать это чище и короче?

var vars = {};
var var_name = "str";
vars[var_name] = "working";
console.log(vars["str"]);
-1
задан XardasLord 16 January 2019 в 12:21
поделиться

3 ответа

Следующее должно работать, в основном создавая функцию, извлекающую поле сортировки из формы и использующую его в операциях 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();
}
0
ответ дан vc 74 16 January 2019 в 12:21
поделиться

Используя код @rob, написанный здесь здесь , в вашем случае итоговый код может выглядеть следующим образом:

 accessForms.Forms = command.OrderProperty.ToLower().Equals("asc")) ?
     accessForms.Forms.OrderBy(command.SortProperty.ToLower()).ToList() :
     accessForms.Forms.OrderByDescending(command.SortProperty.ToLower()).ToList();

Обратите внимание, что вам нужно реализовать собственный OrderByDescending, которого нет оригинальный код.

0
ответ дан Óscar Andreu 16 January 2019 в 12:21
поделиться

Я согласен, что этот вопрос лучше подходит для 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».

0
ответ дан Alexandru Clonțea 16 January 2019 в 12:21
поделиться