2013-04-14 186 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;