添加项目,然后在列表中为该项目指定值

时间:2017-10-04 13:33:30

标签: c#-4.0

我正在使用一个对象列表类型,它从datareader读取数据并添加到列表中。 以下是相同的代码:

 public static List<object[]> LoadRecordsFromDataReaderToList(SqlDataReader reader, int dataLimit)
 {
      List<object[]> dataList = new List<object[]>();
      while (reader.Read())
      {
          object[] columnName = new object[reader.FieldCount];
          for (int i = 0; i < reader.FieldCount; i++)
          {
              columnName[i] = reader.GetName(i);
          }
          dataList = new List<object[]>{columnName};
          object[] tempRow = new object[reader.FieldCount];
          for (int i = 0; i < reader.FieldCount; i++)
          {
              tempRow[i] = reader[i];
          }

          dataList.Add(tempRow);
      }
      return dataList;
  }

正如您在上面的代码中看到的,首先运行一个for循环以获取所有列并在列表中分配如下图像。 List with column name image

然后运行一个循环来获取值并尝试分配相同的列名但在添加tempRow列表后显示两个项目计数,第一个项目包含所有列名称,第二个项目包含所有值。 下面是为所有值添加的图像。 List with added values

如何为列表中的特定列索引分配值? 如果您有任何疑虑,请与我们联系。

1 个答案:

答案 0 :(得分:0)

似乎您想要将列名称添加为&#34;标题&#34;曾经并不总是在while循环中。 您总是在记录循环中覆盖整个列表:

dataList = new List<object[]>{columnName};

我认为你可以使用这种方法:

public static List<object[]> LoadRecordsFromDataReaderToList(SqlDataReader reader)
{
    List<object[]> dataList = new List<object[]>();

    if (reader.HasRows)
    {
        // add header first and just once
        string[] columns = Enumerable.Range(0, reader.FieldCount)
            .Select(reader.GetName)
            .ToArray();
        dataList.Add(columns);
    }

    while (reader.Read())
    {
        // add data records
        object[] tempRow = new object[reader.FieldCount];
        for (int i = 0; i < reader.FieldCount; i++)
        {
            tempRow[i] = reader[i];
        }
        dataList.Add(tempRow);
    }
    return dataList;
}