2013-04-14 122 views
-1

我需要將類型爲List<string>[]的列表數組轉換爲C#中的Datatable。C#List <string> [] to Datatable

我發現許多與List<string[]>相關的主題轉換爲Datatable,但沒有任何關於我需要的轉換。

僞代碼:

//Retrieve data from MySQL server 
db.Select(category, productID); 
//populate List<string>[] array 
list[0] = db.ListQuery[0]; 
list[1] = db.ListQuery[1]; 

//convert list[] to Datatable 
..... 

任何幫助深表感謝。

+0

什麼是 「轉換」 的規則?此外,你不想要轉換。你想用'List '的數據填充'DataTable'。 – Dennis

+0

@ Dennis'list []'與'列表'不同。我提到在標題和大膽它...任何方式,我通過使用'MySQLDataAdapter'而不是'MySQLDataReader'來解決問題,並直接填充表。 – Alex

回答

1

如果我正確理解你的問題,你的意思是這樣嗎?

string category = "Category"; 
string productId = "ProductId"; 
List<string[]> tempList = db.Select(category, productID); //Not necessarily correct (I'm not familiar with MySQL). Do what you need to do to create the List<string[]> 
DataTable table = new DataTable(); 
DataRow row; 
table.Columns.Add(category); 
table.Columns.Add(productId); 
foreach (string[] s in tempList) 
{ 
    row = table.NewRow(); 
    row[category] = s[0]; 
    row[productId] = s[1]; 
    table.Rows.Add(row); 
} 
-1
DataTable dataTable = new DataTable(); 
      List<MemberInfo> props = typeof(T).GetFields().Select(objField => (MemberInfo)objField).ToList(); 
      props.AddRange(typeof(T).GetProperties().Select(objField => (MemberInfo)objField)); 

      if (props.Count > 0) 
      { 
       Type t; 
       bool tIsField = false; 
       for (int iCnt = 0; iCnt < props.Count; iCnt++) 
       { 
        var prop = props[iCnt]; 
        tIsField = prop.MemberType == MemberTypes.Field; 
        dataTable.Columns.Add(prop.Name, tIsField ? ((FieldInfo)prop).FieldType : ((PropertyInfo)prop).PropertyType); 
       } 
       foreach (T item in data) 
       { 
        DataRow dr = dataTable.NewRow(); 

        foreach (var field in props) 
        { 
         tIsField = field.MemberType == MemberTypes.Field; 
         object value = tIsField ? ((FieldInfo)field).GetValue(item) : ((PropertyInfo)field).GetValue(item, null); 
         dr[field.Name] = value; 
        } 
        dataTable.Rows.Add(dr); 
       } 
      } 
      return dataTable;