首页 > 解决方案 > 使用多列 C# 以降序对 DataTable 进行排序

问题描述

我想创建一个方法,该方法能够采用 Datatable 并通过指定的多个列按降序排列行。

下面是我调用表格排序方法的示例:

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

Hotel Costs 和 Flight Costs 都是双列类型。排序方法如下:

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;
    }

该方法只返回一个表,其中的行按 Flight Cost 降序排列。

标签: c#visual-studiodatatable

解决方案


您可以使用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();
}

推荐阅读