我有一个数据集,包含一个数据表,一行和六列:
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异常,导致相信数据表中没有数据。通过停止点检查数据表后,我发现数据量正确。
我是否过于复杂?
答案 0 :(得分:4)
当您致电.ToString()
时,您正在将任何内容转换为单个string
。在单个字符串上调用.ToArray()
不会将该字符串拆分为任何有意义的子字符串,而只是将其转换为char[]
,因为错误状态与变量类型string[]
不兼容。
所以,如果我理解正确...你有一个表,你只想要第一行,并且你希望该行中的项是数组中的字符串?这样的事情应该有效:
currentInvoice = invoiceTable.AsEnumerable().First().ItemArray.Select(i => i.ToString()).ToArray();
它将表作为可枚举,抓取第一行,查看该行中的项数组,将每个项转换为string
,并将string
的枚举转换为阵列。
修改:请注意使用.First()
代替.Take(1)
。虽然在概念上他们做同样的事情,.Take()
返回一个项集合(即使集合中只有一个项目),而.First()
只返回一个项目。另请注意,如果集合中没有您尝试提取第一个元素的项目,则这些可能会抛出错误。因此,在尝试提取第一行之前,如果可能存在没有行的情况,您可能需要添加一些错误检查以确保表具有行。