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

本文关键字:转换 数据 数组 字符串 | 更新日期: 2023-09-27 18:10:19

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

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异常,导致他认为数据表中没有数据。在通过一个停止点检查数据表后,我发现有正确的数据量。

我是不是太复杂了?

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

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

所以,如果我理解正确的话…你有一个表,你只想要它的第一行,你想要那一行的项是数组中的字符串?像这样的代码应该可以工作:

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

它将表作为一个可枚举对象,获取第一行,查看该行中的项目数组,将每个项目转换为string,并将string s的枚举转换为数组。

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