2014-08-27 107 views
0

我想學習ADO.NET,我想出了一些像「ExpandoObject」這是真的有用。ExpandoObject屬性名稱章不工作

 connection.Open(); 

     SqlCommand command = new SqlCommand("Select * from Products [p]", connection); 

     SqlDataReader reader = command.ExecuteReader(); 

     DataTable datatable = new DataTable(); 

     datatable.Load(reader); 

     dynamic products = new List<dynamic>(); 

     for (int i = 0; i < datatable.Rows.Count; i++) 
     { 

      products.Add(new ExpandoObject()); 

      for (int v = 0; v < datatable.Columns.Count; v++) 
      { 
       string column_Name = datatable.Columns[v].ColumnName; 
       object value = datatable.Rows[i].ItemArray[v]; 

       products[i].column_Name = value; 

      } 
     } 

     reader.Close(); 

     connection.Close(); 

     listBox1.Items.Add(products[1].ProductName); 

我正在使用Northwind數據庫。 「column_Name」和「value」部分完美無缺地工作。錯誤部分是「products [i] .column_Name = value;」。我想在這裏找到類似 「products [1] .ProductID = 1」的東西。我怎樣才能做到這一點。謝謝。

+0

請給出更多的信息 - 你得到什麼錯誤? – 2014-08-27 16:14:50

回答

1

ExpandoObject也實施IDictionary<string, object>。對於這個接口,鍵是屬性類型,值是該屬性的值。使用此接口,您可以使用在運行時確定的屬性(而不是編譯時)獲取/設置ExpandoObject的值。

for (int i = 0; i < datatable.Rows.Count; i++) 
{ 
    IDictionary<string, object> nextItem = new ExpandoObject(); 
    for (int v = 0; v < datatable.Columns.Count; v++) 
    { 
     nextItem[datatable.Columns[v].ColumnName] = 
      datatable.Rows[i].ItemArray[v]; 
    } 
    products.Add(nextItem); 
}