Упорядочивание таблицы данных в порядке убывания с использованием нескольких столбцов C # - PullRequest
0 голосов
/ 12 октября 2018

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

Ниже приведен пример, когда я вызываю метод сортировки таблиц:

t1 = getSortedTable(t1 , "Hotel Costs, Flight Cost DESC");

Стоимость отеля и стоимость перелета относятся к типу Double column.Метод сортировки описан ниже:

public static DataTable getSortedTable(DataTable dt, string sort)
    {
        DataTable newTable = new DataTable();
        newTable = dt.Clone();
        newTable.Rows.Clear();
        DataRow[] newRows = dt.Select("", sort);
        foreach (DataRow nr in newRows)
        {
            newTable.Rows.Add(nr.ItemArray);
        }
        return newTable;
    }

Метод возвращает только таблицу со строками, отсортированными по стоимости полета, в порядке убывания.

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете указать DefaultView с параметрами сортировки и просто вернуть это представление ToTable():

public static DataTable GetSortedTable(DataTable dt, string sort)
{
    dt.DefaultView.Sort = sort;
    return dt.DefaultView.ToTable();
}

РЕДАКТИРОВАТЬ: есть вероятность, что наличие пробелов в именах ваших столбцов будет мешать сортировке, такВы можете переименовать имена столбцов следующим образом:

foreach(var column in dt.Columns)
{
    column.ColumnName = column.ColumnName.Replace(" ", "_");
}

Или использовать linq

if (dt.Rows.Count > 0)
{
    dt = dt.AsEnumerable().OrderByDescending(x=>x.Field<decimal>("Hotel Costs")).ThenByDescending(x=>x.Field<decimal>("Flight Costs"))
    .Select(x=>x)
    .CopyToDataTable();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...