2014-05-13 218 views
4

我在運行時創建的動態列表和執行後,我需要將列表分配給我的類屬性如何轉換列表<dynamic>列出在C#<OurClass>

List<tblchargemaster> charge = new List<tblchargemaster>(); 

charge = (List<tblchargemaster>) ObjDB.SelectQuery("tblchargemaster"); 

tblchargemaster是類類型和SelectQuery功能返回List<dynamic>。我如何將這個動態列表轉換爲我的類類型的列表?

 public List<dynamic> SelectQuert(string TableName) 
    { 
     Conn.Open(); 

     DataTable dt = new DataTable("map"); 

     string Query = "Select * from " + TableName;    
     MySqlDataAdapter dr = new MySqlDataAdapter(Query, Conn); 
     dr.Fill(dt); 

     List<dynamic> dynamicDt = dt.ToDynamic(); 

     Conn.Close(); 

     return dynamicDt; 
    } 

和通用類是

public static class DataTableExtensions 
{ 
    public static List<dynamic> ToDynamic(this DataTable dt) 
    { 
     var dynamicDt = new List<dynamic>(); 
     foreach (DataRow row in dt.Rows) 
     { 
      dynamic dyn = new ExpandoObject(); 
      foreach (DataColumn column in dt.Columns) 
      { 
       var dic = (IDictionary<string, object>)dyn; 
       dic[column.ColumnName] = row[column]; 
       dynamicDt.Add(dyn); 
      } 
     } 
     return dynamicDt; 
    } 
} 
+0

的[可能重複的是有沒有辦法動態或匿名對象轉換爲強類型,聲明的對象? ](http://stackoverflow.com/questions/17101190/is-there-a-way-to-convert-a-dynamic-or-anonymous-object-to-a-strongly-typed-dec) – chiccodoro

+0

正如在討論我的答案,這歸結爲如何將動態轉換爲' tblchargemaster'。一旦你可以爲一個對象做到這一點,你也可以爲許多對象做到這一點。 – chiccodoro

+0

我更新我的問題朋友請幫助我。 。 。 – Dinesh

回答

6

編輯,因爲從動態到一個強類型的顯式的轉換不支持。

var charge = ObjDB.SelectQuert("tblchargemaster").Cast<tblchargemaster>(); 

變爲:

var charge = ObjDB.SelectQuert("tblchargemaster").Select(CastDynamicTo<tblchargemaster>) 

CastDynamicTo<tblchargemaster>是由Is there a way to convert a dynamic or anonymous object to a strongly typed, declared object?幫助下實現的

+0

不能將類型'System.Collections.Generic.IEnumerable '隱式轉換爲'System.Collections.Generic.List '。存在明確的轉換(您是否缺少演員?) – Dinesh

+1

最後調用ToList()方法 –

+0

@Dinesh:看起來像您沒有複製我的代碼1:1。如果你真的想明確地輸入'charge'作爲'List <..>',你需要在'.Cast <...>' – chiccodoro

2

使用Cast<tblchargemaster>()方法:

List<tblchargemaster> charge = new List<tblchargemaster>(); 

charge = charge.AddRange(
    ObjDB.SelectQuert("tblchargemaster").Cast<tblchargemaster>()); 
+0

不能隱式地將類型'void'轉換爲'System.Collections.Generic.List 這樣的錯誤 – Dinesh

+0

我更新我的問題朋友請幫助我。 .. – Dinesh

相關問題