2011-05-18 37 views
2

可能重複:
How can I easily convert DataReader to List<T>?如何將DataReader中的值放入列表<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; 
     } 
    } 
} 
+0

可能從這裏[link](http://stackoverflow.com/questions/1464883/how-can-i-easily-convert-datareader-to-listt) – Dotnet 2011-05-18 09:26:13

+0

請將您的變量名稱重命名爲英文 - 寫 – abatishchev 2011-05-18 09:40:32

+0

我已編輯abatishchev – PsyGnosis 2011-05-18 10:06:33

回答

8

無法以您所描述的方式訪問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 
     } 
    } 
} 

如果你只選擇一列,並確信它是一個整數,那麼可以簡化像這樣的代碼:

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可能有些用處。

+0

我有一列,但列有多個值..我想檢查eslesenpuan包含puan通用列表如果(puan.contains(eslesenpuan)) 我想更新該點.. – PsyGnosis 2011-05-18 10:01:32

3

我認爲你需要從讀取器中獲得項目,如puanoku["item"]並將其轉換爲int。添加,然後只有你可以將它添加到列表中。

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

datareader是指向表中的行的指針。您可以使用閱讀器上的索引器獲取各個屬性,並使用FieldCount屬性獲取這些值。

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

如果你只是想你應該使用一個HashSet,而不是一個列表,因爲它會爲O測試存在(1),而不是O(n)的唯一值。

相關問題