我有一组来自sql查询的结果,我填写了一个数据表:
adapter.Fill(dt);
然后我将dt转换为数组:
string[][] mergeBlockData =
dt.Rows
.OfType<DataRow>().Select(r => dt.Columns.OfType<DataColumn>()
.Select(c => r[c.ColumnName].ToString())
.ToArray())
.ToArray();
我还想在第一个数组元素中添加列名。怎么样?
这是硬编码时的mergeBlockData
string[][] mergeBlockData = new string[][] {
new string[] { "connection_number", "connection_duration", "fee" },
new string[] { "7777", "3:15", "€ 10.0" },
new string[] { "6666", "23:15", "€ 20.0" },
new string[] { "5555", "13:15", "€ 30.0" },
new string[] { "8888", "83:15", "€ 40.0" } };
答案 0 :(得分:0)
编辑(需求更改后):
试试这个:
string[][] mergeBlockData =
new List<string[]>{ dt.Columns.OfType<DataColumn>().Select(dc => dc.ColumnName).ToArray() }.Concat(
dt.Rows.OfType<DataRow>()
.Select(
r => dt.Columns.OfType<DataColumn>()
.Select(c => r[c.ColumnName].ToString()).ToArray()
)
)
.ToArray();
答案 1 :(得分:0)
错误"A column named ' ' already belongs to this DataTable."
来自DataTable创建,而不是来自字符串表示创建。
确保您的DataTable只构建一次,列名称中没有重复项。
为了正确创建你的字符串表示,你可以在你的行上循环:
string [] [] stringRepresentation = new string [dt.Rows.Count] [];
for(int i = 0 ; i < dt.Rows.Count ; ++i)
stringRepresentation[i] = dataTable.Rows[i].ItemArray.Select(x => x.ToString()).ToArray();