【问题标题】:How to put values from DataReader into List<T>? [duplicate]如何将 DataReader 中的值放入 List<T>? [复制]
【发布时间】:2011-05-18 09:18:50
【问题描述】:

可能重复:
How can I easily convert DataReader to List<T>?

我想将来自 datareader 对象的数据放在一个通用列表中。我已经这样做了,但它不起作用......

我在 foreach 行中遇到异常错误!

 SqlDataReader pointreader = cmd2.ExecuteReader();
 var pointt = new List<int>();
 while (pointreader.Read())
 {
     foreach (int item in pointreader)
     {
        pointt.Add(item);
         if (pointt.Contains(point))
         {
             matchpoint = item;
         }
     }
 }

【问题讨论】:

  • 可能从这里得到link
  • 请将您的变量名重命名为英文书写

标签: c# .net ado.net


【解决方案1】:

SqlDataReader 无法以您描述的方式访问,因为它没有实现 IEnumerable。相反,您需要单独访问每个字段:

SqlDataReader puanoku = cmd2.ExecuteReader();
List<int> puann = new List<int>();
while (puanoku.Read())
{
    for (int i = 0; i < puanoku.FieldCount; i++)
    {
        if (puanoku.GetFieldType(i) == typeof(int))
        {
            // Do something here
        }
    }
}

如果您只选择了一列并且确定它是一个 int,那么您可以像这样简化代码:

SqlDataReader puanoku = cmd2.ExecuteReader();
List<int> puann = new List<int>();
while (puanoku.Read())
{
    int value = puanoku.GetInt32(1);

    // Do something with the int here...
}

这个article 可能有点用处。

【讨论】:

  • 我有一列,但列有多个值.. 我想检查 eslesenpuan 是否包含 puan 通用列表 if(puan.contains(eslesenpuan)) 我想更新这一点..
【解决方案2】:

我认为您需要从阅读器中获取项目,例如 puanoku["item"] 并将其转换为 int。添加然后只有您可以将其添加到列表中。

while(Reader.Read())
{
  var myId = (int)Reader["myId"];
  myIdList.Add(myId); // or you can do myIdList.Add(int)Reader["myId"]);
}

【讨论】:

    【解决方案3】:

    datareader 是指向表中行的指针。您可以使用阅读器上的索引器访问各个属性,并使用FieldCount 属性来获取值。

     while (puanoku.Read())
     {
      for(int i = 0; i < puanoku.FieldCount)
      {
          puann.Add(puanoku.GetInt32(i));
      }
     }
    

    如果你只想要唯一的值,你应该使用 HashSet 而不是 List,因为它会在 O(1) 而不是 O(n) 中测试是否存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      相关资源
      最近更新 更多