Заказать IList с именем поля в аргументе - PullRequest
2 голосов
/ 12 января 2010

У меня есть этот простой кусок кода

public ActionResult ListToGrid(string field, string direction)
{
    _model.MyList = _repo.List();
}

Для сортировки я могу сделать это:

_model.MyList = _employeeService.List().OrderBy(x => x.FirstName).ToList<Employee>();

Но я бы хотел использовать "в качестве поля" имя получения (поле) в аргументе и полученное направление.

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 января 2010

Вы могли бы использовать отражение, но это было бы довольно медленно. Наиболее эффективным было бы объявить делегата для использования в сортировке и назначить функцию в зависимости от строки:

Func<Employee,string> order;
switch (field) {
   case "FirstName": order = x => x.FristName;
   case "LastName": order = x => x.LastName;
}

Для направления я думаю, что лучше просто использовать отдельные коды:

var list = _employeeService.List();
IEnumerable<employee> sorted;
if (direction == "ascending") {
   sorted = list.OrderBy(order);
} else {
   sorted = list.OrderByDescending(order);
}
_model.List = sorted.ToList<Employee>();
1 голос
/ 12 января 2010

Поиск сайтов, которые говорят о динамических выражениях LINQ. Например, этот пример показывает, как выполнить динамическую сортировку:

http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx

Затем вы также можете выбрать, вызывать OrderBy или OrderByDescending в зависимости от параметра направления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...