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

苏尼尔

我正在使用C#开发ASP.Net应用程序。我需要对一个名为“价格”的列的转换后的值对数据表中的行进行排序,这是出于某种未知的原因,是数据表中的字符串类型的列。

下面的代码段将为我提供有关Price列的字符串值的排序DataTable,但是我要寻找的是对Price列的Decimal值进行排序。

问题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/zh-cn/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”列中的值转换为“十进制类型”的转换函数示例要转换的函数的第二个参数必须是要转换为的.Net类型的名称,并且应将其括在单引号中。

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

我最好的主意是让您将这些值转换为十进制,对它们进行排序并将其复制回表中:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章