2012-12-06 20 views
1

我正在使用VS2010和C#。我有一個我想要轉換爲List的DataTable。如何將DataTable轉換爲帶有現有類屬性的runtype上的列表?

Suppose: 
Table dt; 

運行時希望從數據表中創建類似的字段並填充List中的字段。不存在列表屬性的現有類。

ListName=TableName 
List property name=Table column name 
List Property type=Table column type 
List items=Table rows 

注:上EF.To最近工作fullfill我的項目要求,需要能靈活使用輸入並執行ESQL在運行。我不希望把數據表或List<DataRow>這個執行結果,想把這個結果放在名單上。 列表中沒有現有的類和屬性,不想將列表中的DataTable轉換類型:DataRow

+0

聽起來好像你在問怎麼在運行時創建一個新類。你想達到什麼目的? – SLaks

+0

但是列表中沒有字段。列表包含強類型對象。 – Paparazzi

+0

Blam感謝您的回覆,我們可以在運行時創建對象,我們不可以嗎?創建對象之後,我們也可以將其分配給列表,但問題仍然存在於此問題上,所以我尋求幫助。 – shamim

回答

1

我們仍然不確定您想要做什麼,但是如果您想創建動態對象列表,則可以嘗試dynamic

var dynamicList = new List<dynamic>(); 

然後,你將不得不通過ExpandoObject

分配值到列表和你將不得不將它轉換爲IDictionary通過列名作爲屬性。

然後你就可以像這樣訪問item.YourColumnName

列表項下面是一個完整的例子:

  var dynamicList = new List<dynamic>(); 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("Col1"); 
      dt.Columns.Add("Col2"); 
      dt.Rows.Add("val1","val2"); 
      dt.Rows.Add("val3", "val4"); 
      foreach (DataRow dr in dt.Rows) 
      { 
       dynamic myObj = new ExpandoObject(); 
       var p = myObj as IDictionary<string, object>; 
       p[dr.Table.Columns[0].ColumnName] = dr[0]; 
       p[dr.Table.Columns[1].ColumnName] = dr[1]; 
       dynamicList.Add(p); 
      } 

      foreach (var item in dynamicList) 
      { 
       Console.WriteLine(item.Col1 + " " + item.Col2); 
      } 

或LINQ也適用,當然打印出值:

dynamicList.ForEach(x => Console.WriteLine(x.Col1 + " " + x.Col2)); 

這程序將打印出:

val1 val2 
val3 val4 
相關問題