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

C# 通过转换为字符串将数据转换为数组,c#,arrays,datatable,C#,Arrays,Datatable,我有一个数据集,包含一个datatable、一行和六列: DataSet holdall = new DataSet(); holdone.Fill(holdall); DataTable invoiceTable = holdall.Tables["INVOICE"]; 数据来自SQL数据库,由几种不同的数据类型组成。我需要将此数据传递到数组或列表中(当然,数组更合适),并将其转换为字符串格式: string[] currentInvoic

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

DataSet holdall = new DataSet();

            holdone.Fill(holdall);

            DataTable invoiceTable = holdall.Tables["INVOICE"];
数据来自SQL数据库,由几种不同的数据类型组成。我需要将此数据传递到数组或列表中(当然,数组更合适),并将其转换为字符串格式:

string[] currentInvoice = new string[6];
currentInvoice = invoiceTable.AsEnumerable().Take(1).ToString().ToArray();
这给了我以下错误:

无法将类型“char[]”隐式转换为“string[]”

我也试过了

foreach (DataRow INVOICE in invoiceTable.AsEnumerable())
            {
                currentInvoice.ToArray();
            }
但是,这将返回一个Null异常,这将导致be认为datatable中没有数据。在通过停止点检查datatable时,我发现数据量是正确的


我是否过于复杂了?

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

所以,如果我理解正确。。。您有一个表,其中只需要第一行,并且希望该行中的项是数组中的字符串?这样的事情应该行得通:

currentInvoice = invoiceTable.AsEnumerable().First().ItemArray.Select(i => i.ToString()).ToArray();
它将表作为可枚举项,获取第一行,查看该行中的项目数组,将每个项目转换为
字符串,并将
字符串的枚举转换为数组


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

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

所以,如果我理解正确。。。您有一个表,其中只需要第一行,并且希望该行中的项是数组中的字符串?这样的事情应该行得通:

currentInvoice = invoiceTable.AsEnumerable().First().ItemArray.Select(i => i.ToString()).ToArray();
它将表作为可枚举项,获取第一行,查看该行中的项目数组,将每个项目转换为
字符串,并将
字符串的枚举转换为数组


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

什么是原始数据,什么是所需数据?你能澄清一下吗?显示您的表和所需数组的示例。出于安全目的,我无法向您提供任何实际数据(我正在处理与GFO有关的敏感信息)。我能说的是我有SQL类型:Int、Char、Money和DateTime。我需要所有这些字符串格式。只需给出一些示例,如:{10,“asdas”,10.0},{12312,“asdf”,11.123123}。。。数组中的结果项如:“10,asdas,10.0”,“123….@EugenePodskal Table:{09454097656,name,£99.99,£5.99,01/01/2011}结果数组看起来应该完全相同,但所有条目都是字符串格式“。什么是原始数据,什么是所需数据?你能澄清一下吗?显示您的表和所需数组的示例。出于安全目的,我无法向您提供任何实际数据(我正在处理与GFO有关的敏感信息)。我能说的是我有SQL类型:Int、Char、Money和DateTime。我需要所有这些字符串格式。只需给出一些示例,如:{10,“asdas”,10.0},{12312,“asdf”,11.123123}。。。数组中的结果项如:“10,asdas,10.0”,“123….@EugenePodskal Table:{09454097656,name,£99.99,£5.99,01/01/2011}结果数组看起来应该完全相同,但所有条目都是字符串格式“这正是我需要的。事实上,一个表中只有一行,因为这是一个查找特定记录的直接查询。我说得太早了:
'System.Collections.Generic.IEnumerable'不包含'ItemArray'的定义,并且找不到接受'System.Collections.Generic.IEnumerable'类型的第一个参数的扩展方法'ItemArray'。
@Rote:抱歉,将.Take(1)替换为.first()相反我将很快更新答案…Null异常:
值不能为Null
。这是否意味着没有数据?或者把数据放到DataTable有什么问题?@RoteKatze:当你调试这个时,什么是
null
?这正是我需要的。事实上,一个表中只有一行,因为这是一个查找特定记录的直接查询。我说得太早了:
'System.Collections.Generic.IEnumerable'不包含'ItemArray'的定义,并且找不到接受'System.Collections.Generic.IEnumerable'类型的第一个参数的扩展方法'ItemArray'。
@Rote:抱歉,将.Take(1)替换为.first()相反我将很快更新答案…空异常:
值不能为b