C# 4.0 添加项目,然后在列表中为该项目赋值

C# 4.0 添加项目,然后在列表中为该项目赋值,c#-4.0,C# 4.0,我使用的是一种对象列表类型,它从datareader读取数据并添加到列表中。 以下是相同的代码: public static List<object[]> LoadRecordsFromDataReaderToList(SqlDataReader reader, int dataLimit) { List<object[]> dataList = new List<object[]>(); while (reader.Read())

我使用的是一种对象列表类型,它从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;
  }
public static List loadrecords fromdatareadertolist(SqlDataReader reader,int dataLimit)
{
List dataList=新列表();
while(reader.Read())
{
object[]columnName=新对象[reader.FieldCount];
对于(int i=0;i
正如您在上面的代码中所看到的,首先运行一个for循环来获取所有列并在列表中赋值,如下图所示。

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

如何为列表中的特定列索引赋值?
如果您有任何问题,请告诉我。

您似乎希望将列名添加为“标题”一次,而不是始终在while循环中。 您总是在以下位置覆盖记录循环中的整个列表:

dataList = new List<object[]>{columnName};
dataList=新列表{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;
}
publicstaticlist加载记录fromdatareadertolist(SqlDataReader)
{
List dataList=新列表();
if(reader.HasRows)
{
//首先添加标题,并且只添加一次
string[]columns=Enumerable.Range(0,reader.FieldCount)
.Select(reader.GetName)
.ToArray();
添加(列);
}
while(reader.Read())
{
//添加数据记录
object[]tempRow=新对象[reader.FieldCount];
对于(int i=0;i
while
是迭代读卡器中每条记录的第一个循环。在这里,您总是添加所有列names@TimSchmelter,你能纠正我哪里做错了吗?我已经检查了给定的代码,但我仍然可以看到在数据列表中添加temprow后,我有两项计数。一个是列的字符串计数,第二个是值的对象计数。我需要在这里为每列项目应该有他们的价值以及。比如我们如何使用List userDetailsList=new List();其中Report\u UserDetails对象有properies名称。当为该列表添加值时,将为特定属性设置值。希望你明白我想说的。蒂姆,它现在起作用了。我在实现上述代码时犯了一些错误。