首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用多列C#对DataTable进行降序排序

使用多列C#对DataTable进行降序排序
EN

Stack Overflow用户
提问于 2018-10-12 21:39:11
回答 1查看 5.1K关注 0票数 2

我想创建一个方法,它能够接受一个数据表,并通过指定的多个列按降序排列行。

下面是我调用表排序方法时的一个示例:

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

“酒店成本”和“航班成本”都是双列。排序方法如下:

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降序排序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 22:23:17

您可以使用排序参数指定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();
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52780773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档