Сортировка в переменном порядке [дубликат]

258
21 мая 2017, 20:18

На данный вопрос уже ответили:

  • Сортировка List<T> по нескольким полям c учётом приоритета 2 ответа

Проблема, собственно, следующая: есть класс

public class Task
    {
        public int id {get; set; }
        public string title {get; set; }
        public int weight {get; set; }
    }

Далее имею List <Task> Tasks.

Хочу отсортировать их по двум из трёх параметрам, но порядок задать снаружи.

То есть, скажем, присвоить

int Sort_id = 1;
int Sort_title = 0;
int Sort_weight = 2;

И отсортировать сначала по id, а потом по weight.

Я умею сортировать в известном заранее определённом порядке:

SortedTasks = Tasks.OrderBy(t => t.id).ThenBy(t => t.weight).ToList();

Но мою проблему это не решает, т.к. мне надо задать порядок сортировки в зависимости от переменных.

Перебором и case'ами решать глупо. Вариантов слишком много.

Я хотел передать

string sort1 = "t.td";
string sort2 = "t.weight";

и как-то передать их в OrderBy()

SortedTasks = Tasks.OrderBy(t => sort1).ThenBy(t => sort2).ToList();

Но это, конечно, не работает.

Может, как-то иначе? Либо всё-таки научиться передавать в SortBy параметр, либо вообще всю схему поменять.

Я уже порылся в делегатах, прочитал тут и вот тут но что-то не могу сообразить...

Есть ещё похожий вопрос в русской части, но там сложнее сортировка: у меня порядок только убывающий и всего-то порядок нужно выбрать.

Answer 1

С некоторыми приключениями, но вот это очень похоже. Единственное, новичкам типа меня хорошо бы почитать про

using System.Linq.Expressions;

помнить, что класс Sort уже был определён, поэтому метод надо как-нибудь переименовать, и что возвращает этот метод список.

READ ALSO
Как проверить правильно ли введена дата?

Как проверить правильно ли введена дата?

Добрый день, задача следующая: В WinForms дан текстбокс в который должна вводиться дата в формате YYYY-MM-DD, как проверить что дата введена в правильном...

291
Как узнать путь к программе например calc.exe?

Как узнать путь к программе например calc.exe?

Например в cmd можно запустить написав calcexe

304