DataTable 计算对象到十进制
DataTable Compute object to decimal
我正在尝试通过将 Compute
函数与 DataTable
结合使用来获取小数值。我需要 verNumber
列的最大值,它 总是 是一个整数 (1
,2
,3
)或一位小数(1.1
、1.2
、2.3
、3.1
等),但也可以像 1.1.1
或 4.1.2
这样结束.它永远不会是 1.0
或 2.11
之类的东西。考虑文档版本号。
不需要对这些数字进行计算,它们只是传递给当前接受字符串(但可以轻松更改)的函数,因此包含最大值的字符串应该可以工作,尽管作为概念证明我试图让它与 2
和 2.1
这样的数字一起工作。来自 (GetVersionsTable() method
) 的数据库 table 的数据类型是 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 是字符串(1.1.1 既不是 int 也不是 decimal)请 post 一些最小的复制代码。我试过下面的代码 - 它工作正常。
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);
我正在尝试通过将 Compute
函数与 DataTable
结合使用来获取小数值。我需要 verNumber
列的最大值,它 总是 是一个整数 (1
,2
,3
)或一位小数(1.1
、1.2
、2.3
、3.1
等),但也可以像 1.1.1
或 4.1.2
这样结束.它永远不会是 1.0
或 2.11
之类的东西。考虑文档版本号。
不需要对这些数字进行计算,它们只是传递给当前接受字符串(但可以轻松更改)的函数,因此包含最大值的字符串应该可以工作,尽管作为概念证明我试图让它与 2
和 2.1
这样的数字一起工作。来自 (GetVersionsTable() method
) 的数据库 table 的数据类型是 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 是字符串(1.1.1 既不是 int 也不是 decimal)请 post 一些最小的复制代码。我试过下面的代码 - 它工作正常。
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);