在列

时间:2015-07-17 23:46:19

标签: c# sorting datatable

我正在使用C#编写ASP.Net应用程序。我需要在DataTable中对名为“Price”的列的转换值进行排序,这是由于某种未知原因,DataTable中的字符串类型列。

下面的代码片段会在Price列的字符串值上为我提供一个已排序的DataTable,但我要查找的是对Price列的十进制值进行排序。

问题:在此代码段中,我需要使用哪个表达式来表示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')"

1 个答案:

答案 0 :(得分:2)

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

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