从DataTable中提取双精度列

时间:2008-12-13 03:42:49

标签: c# .net linq

有没有更简单的方法来实现以下目标?

var obj = from row in table.AsEnumerable()
          select row["DOUBLEVALUE"];

double[] a = Array.ConvertAll<object, double>(obj.ToArray(), o => (double)o);

我正在从DataTable中提取一列,并将该列存储在double s的数组中。

假设tableDataTable,其中包含typeof(Double)类型名为“DOUBLEVALUE”的列。

2 个答案:

答案 0 :(得分:2)

double[] a = (from row in table.AsEnumerable()
              select Convert.ToDouble( row["DOUBLEVALUE"] )).ToArray();

如果您的列可能包含空值,请在选择之前添加where row["DOUBLEVALUE"] != null

答案 1 :(得分:2)

var obj = (from row in table.AsEnumerable()
      select row.Field<double>("DOUBLEVALUE")).ToArray();

当然,.ToArray()位是可选的;没有ToArray(),你将得到一个可枚举的双精度序列而不是数组 - 这取决于你是否需要读一次或两次。如果数据中有空值,请改用<double?>

(请注意,这需要对System.Data.DataSetExtensions.dll的引用,以及“using System.Data;”语句 - 这会使.Field<T>(...)扩展方法发挥作用)