我想创建一个方法,它能够接受一个数据表,并通过指定的多个列按降序排列行。
下面是我调用表排序方法时的一个示例:
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降序排序。
发布于 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();
}
https://stackoverflow.com/questions/52780773
复制相似问题