根据列的转换值对数据表进行排序

本文关键字:数据表 排序 转换 | 更新日期: 2023-09-27 18:03:30

我正在做一个ASP。Net应用程序。我需要在一个名为"Price"的列的转换值上对数据表中的行进行排序,这是由于某种未知的原因,数据表中的字符串类型列。

下面的代码片段将在Price列的字符串值上给我一个排序的DataTable,但我要找的是对Price列的Decimal值进行排序。

问题:在这段代码片段中,我需要为Select方法的第二个参数使用什么表达式?目前,该参数的值为Price asc

DataTable dt = GetData();
dt = dt.Select( null, "Price asc", DataViewRowState.CurrentRows).CopytoDataTable();

更新1

我能够在上面的代码片段中做一个最小的更改,但仍然使用价格的十进制值进行排序。我使用Convert函数将价格列的字符串值转换为十进制类型。DataTable表达式支持此函数。此函数的详细信息可在此位置找到:https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression(v=vs.110).aspx

有效的代码如下:

DataTable dt = GetData();
//define an expression column for decimal version of Price
dt1.Columns("Price1").Expression = "Convert(Price, 'System.Decimal')"
dt = dt.Select( null, "Price1 asc", DataViewRowState.CurrentRows).CopytoDataTable();

转换函数示例用于将名为'total'的列中的值转换为Decimal类型,如下所示。转换函数的第二个参数必须是要转换为的。net类型的名称,并且应该用单引号括起来。

myDataColumn.Expression="Convert(total, 'System.Int32')"

根据列的转换值对数据表进行排序

我最好的想法是将这些值转换为十进制,排序并将它们复制回表:

dt = dt.Rows.Cast<DataRow>().OrderBy(row => Convert.ToDecimal(row["Price"])).CopyToDataTable();