【发布时间】:2015-07-17 23:46:18
【问题描述】:
我正在使用 C# 开发一个 ASP.Net 应用程序。我需要根据名为“Price”的列的转换值对 DataTable 中的行进行排序,出于某种未知原因,这是 DataTable 中的字符串类型列。
下面的代码 sn-p 会给我一个按价格列的字符串值排序的数据表,但我正在寻找的是按价格列的小数值排序。
问题:在这段代码 sn-p 中,Select 方法的第二个参数需要使用什么表达式?目前,该参数的值为Price asc。
DataTable dt = GetData();
dt = dt.Select( null, "Price asc", DataViewRowState.CurrentRows).CopytoDataTable();
更新 1
我能够对上面的代码-sn-p 进行最小的更改,但使用价格的十进制值进行排序。我使用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”的列中的值转换为小数类型如下。 convert 函数的第二个参数必须是要转换成的 .Net 类型的名称,并且应该用单引号括起来。
myDataColumn.Expression="Convert(total, 'System.Int32')"
【问题讨论】:
-
我尝试使用 Convert inside expression 完全按照您在我回答之前在这里编写的方式转换 DataTable 中的列,但它不起作用。 “找不到列转换(价格”
-
@msmolcic,我会再次检查并通知您。感谢您指出。
-
@msmolcic,我在 UPDATE1 下编辑了代码,我已经验证它可以工作。这个想法是使用DataTable表达式创建一个计算列,然后对计算列进行排序。
-
添加另一列以插入转换为十进制的值并按新列排序比我的 LINQ 解决方案更加混乱,但哦,这是您的选择。