有没有比这更好的方法来检查DataTable中的DataColumn是否为数字(来自SQL Server数据库)?
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetStoredProcCommand("Get_Some_Data");
DataSet ds = db.ExecuteDataSet(cmd);
foreach (DataTable tbl in ds.Tables) {
foreach (DataColumn col in tbl.Columns) {
if (col.DataType == typeof(System.Single)
|| col.DataType == typeof(System.Double)
|| col.DataType == typeof(System.Decimal)
|| col.DataType == typeof(System.Byte)
|| col.DataType == typeof(System.Int16)
|| col.DataType == typeof(System.Int32)
|| col.DataType == typeof(System.Int64)) {
// this column is numeric
} else {
// this column is not numeric
}
}
}
答案 0 :(得分:38)
除了将其与实际类型进行比较之外,没有好办法检查类型是否为数字 如果数字的定义有点不同(在您的情况下,根据代码, - 无符号整数不是数字),尤其如此。
另一件事是DataColumn.DataType according to MSDN仅支持以下类型:
粗体类型是数字(我定义它),因此您需要确保检查它们。
我个人会为DataColumn类型编写扩展方法(不适用于TYPE!) 我讨厌 if ... then..else ,所以我使用基于 SETS 的方法,如下所示:
public static bool IsNumeric(this DataColumn col) {
if (col == null)
return false;
// Make this const
var numericTypes = new [] { typeof(Byte), typeof(Decimal), typeof(Double),
typeof(Int16), typeof(Int32), typeof(Int64), typeof(SByte),
typeof(Single), typeof(UInt16), typeof(UInt32), typeof(UInt64)};
return numericTypes.Contains(col.DataType);
}
用法是:
if (col.IsNumeric()) ....
这对我来说很容易
答案 1 :(得分:2)
另一种不使用数组的方法,只需一行代码:
return col != null && "Byte,Decimal,Double,Int16,Int32,Int64,SByte,Single,UInt16,UInt32,UInt64,".Contains(col.DataType.Name + ",");
这行代码既可以用作普通的辅助方法,也可以用作扩展方法。
答案 2 :(得分:1)
也许你可以通过以下方式缩短时间:
System.Type theType = col.DataType AS System.Type
if(theType == System.Single || theType == System.Double...) {}