数据通过转换为字符串到数组

时间:2014-06-26 13:25:23

标签: c# arrays datatable

我有一个数据集,包含一个数据表,一行和六列:

DataSet holdall = new DataSet();

            holdone.Fill(holdall);

            DataTable invoiceTable = holdall.Tables["INVOICE"];

数据来自SQL数据库,由几种不同的数据类型组成。我需要将这些数据传递到数组或列表中(AFAIK数组更合适),并在路上将其转换为字符串格式:

string[] currentInvoice = new string[6];
currentInvoice = invoiceTable.AsEnumerable().Take(1).ToString().ToArray();

这给了我以下错误:

  

无法隐式转换类型' char []'到' string []'

我也试过

foreach (DataRow INVOICE in invoiceTable.AsEnumerable())
            {
                currentInvoice.ToArray();
            }

但是,这会返回一个Null异常,导致相信数据表中没有数据。通过停止点检查数据表后,我发现数据量正确。

我是否过于复杂?

1 个答案:

答案 0 :(得分:4)

当您致电.ToString()时,您正在将任何内容转换为单个string。在单个字符串上调用.ToArray()不会将该字符串拆分为任何有意义的子字符串,而只是将其转换为char[],因为错误状态与变量类型string[]不兼容。

所以,如果我理解正确...你有一个表,你只想要第一行,并且你希望该行中的项是数组中的字符串?这样的事情应该有效:

currentInvoice = invoiceTable.AsEnumerable().First().ItemArray.Select(i => i.ToString()).ToArray();

它将表作为可枚举,抓取第一行,查看该行中的项数组,将每个项转换为string,并将string的枚举转换为阵列。

修改:请注意使用.First()代替.Take(1)。虽然在概念上他们做同样的事情,.Take()返回一个项集合(即使集合中只有一个项目),而.First()只返回一个项目。另请注意,如果集合中没有您尝试提取第一个元素的项目,则这些可能会抛出错误。因此,在尝试提取第一行之前,如果可能存在没有行的情况,您可能需要添加一些错误检查以确保表具有行。