通过转换为字符串将数据转换为数组
本文关键字:转换 数据 数组 字符串 | 更新日期: 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()
只返回单个项目。还请注意,如果集合中没有要从中提取第一个元素的项,则可能抛出错误。因此,您可能需要添加一些错误检查,以确保表在尝试提取第一行之前具有行,如果可能出现它没有行的情况。