我尝试使用带有Compute
的{{1}}函数来获取小数值。我需要DataTable
列的最大值,始终是一个整数(verNumber
,1
,2
)或小数在一个地方(3
,1.1
,1.2
,2.3
等),但最终也可以是3.1
或1.1.1
。它绝不会像4.1.2
或1.0
那样。想想文档版本号。
不需要对这些数字进行计算,它们只是传递给当前接受字符串的函数(但可以很容易地更改),因此包含最大值的字符串应该可以工作,尽管作为概念证明I&# 39;我试图让它与2.11
和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
,但为什么我不能将其转换为小数?
请注意,虽然我很乐意使用Linq解决这个问题,但我不能,因为我没有支持linq。
答案 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);