DataTable将对象计算为十进制

时间:2017-08-03 15:23:04

标签: c# type-conversion c#-2.0

我尝试使用带有Compute的{​​{1}}函数来获取小数值。我需要DataTable列的最大值,始终是一个整数(verNumber12)或小数在一个地方(31.11.22.3等),但最终也可以是3.11.1.1。它绝不会像4.1.21.0那样。想想文档版本号。

不需要对这些数字进行计算,它们只是传递给当前接受字符串的函数(但可以很容易地更改),因此包含最大值的字符串应该可以工作,尽管作为概念证明I&# 39;我试图让它与2.112等数字一起使用。如果这很重要,那么来自(2.1)的数据库表的数据类型为GetVersionsTable() method

如果我尝试使用带有小数的代码,则会抱怨它是无效的强制转换。使用int有效,但如果它存在,显然会删除小数位。

int

System.Data.DataTable dt = doc.GetVersionsTable(true) as System.Data.DataTable; decimal maxVal = (decimal) dt.Compute( "MAX(verNumber)", string.Empty );

中的结果

我也尝试过使用类似投诉的specified cast not valid

我试着直接得到一个字符串;

decimal.Parse

这给了我string maxVal = (string) dt.Compute( "MAX(verNumber)", string.Empty ); ,这表明它是Unable to cast object type of System.Int32 to type System.String,但为什么我不能将其转换为小数?

请注意,虽然我很乐意使用Linq解决这个问题,但我不能,因为我没有支持linq。

1 个答案:

答案 0 :(得分:0)

我认为verNumber是字符串(1.1.1既不是int也不是十进制)请发布一些最小的再现代码。我已尝试过代码 - 它运行正常。

DataTable dt = new DataTable();
dt.Clear(); 
dt.Columns.Add("verNumber");
object[] o = { "1.2.1" };
dt.Rows.Add(new object[] { "1.1.1" });
dt.Rows.Add(new object[] { "1.4" });
dt.Rows.Add(new object[] { "2" });
dt.Rows.Add(new object[] { "4.1.4" });
string maxVal = (string)dt.Compute( "MAX(verNumber)", string.Empty);
Console.WriteLine(maxVal);