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

Sort a DataTable on converted value of a column

我正在使用 C# 开发 ASP.Net 应用程序。我需要根据名为 'Price' 的列的转换值对 DataTable 中的行进行排序,由于某些未知原因,DataTable 中的字符串类型列。

下面的代码片段会为我提供一个按价格列的字符串值排序的数据表,但我要查找的是按价格列的十进制值排序。

问题:在此代码段中,Select 方法的第二个参数需要使用什么表达式?现在,此参数的值为 Price asc.

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

更新 1

我能够在上面的代码片段中进行最小的更改,但使用 Price 的十进制值进行排序。我使用 Convert 函数将 Price 列的字符串值转换为 Decimal 类型。 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')"

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

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