我试图通过使用Compute
函数与DataTable
得到一个十进制值。我需要的verNumber
列,这将总是是一个整数(1
,2
,3
)或一个地方(1.1
,1.2
,2.3
,3.1
等),一个小数,但也可以落得像1.1.1
的最大值或4.1.2
。它永远不会像1.0
或2.11
。考虑文档版本号。DataTable计算对象到十进制
这些数字不需要计算,它们只传递给当前接受字符串的函数(但可以很容易地更改),所以包含最大值的字符串应该可以工作,尽管作为概念验证I试图让它与2
和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
,这表明它是一个int
,但为什么我不能把它转换为十进制?
请注意,虽然我很乐意使用Linq来解决这个问题,但我不能,因为我坚持不支持linq。
如果verNumber列类型为int,那么它只是不能容纳1.1(不是int),更不用说1.2.3这不是任何种类的数量。 –
我的不好,还有一个标签栏,其中包含'1.1.2'类型的数字。我会看看我是否可以返回它,因为它是一个字符串,那么我可以使用它,用上面的代码来获取最大版本号 –