如何添加到第一个数组元素?

时间:2014-05-29 08:44:53

标签: c# arrays linq datatable

我有一组来自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" } };

2 个答案:

答案 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();