【C#常用方法】1.DataTable与List<T>的相互转换

 


 

DataTable与List<T>互转

1.List<T>转DataTable


 

public static DataTable ListToDataTable<T>(List<T> list)
{
    if(list==null || list.Count==0)
    {
        return new DataTable();
    }
    //获取T下所有的属性
    Type entityType = list[0].GetType();
    PropertyInfo[] entityProperties = entityType.GetProperties();

    DataTable dt = new DataTable("data");
    for(int i=0; i<entityProperties.Length; i++)
    {
        dt.Columns.Add(entityProperties[i].Name);
    }
    foreach (var item in list)
    {
        if(item.GetType() != entityType)
        {
            throw new Exception("要转换集合元素类型不一致!")
        }
        //创建一个用于放所有属性值的数组
        object[] entityValues = new object[entityProperties.Length];
        for(int i=0; i<entityProperties.Length; i++)
        {
            entityValues[i] = entityProperties[i].GetValue(item, null);
        }
        
        dt.Rows.Add(entityValues)
    }
    return dt;
}

 

2.DataTable转List<T>


 

public static IList<T> ConvertToModel(DataTable dt)    
{    
   // 定义集合    
    IList<T> ts = new List<T>(); 
   // 获得此模型的类型   
    Type type = typeof(T);      
   string tempName = "";      
   foreach (DataRow dr in dt.Rows)      
    {    
        T t = new T();     
       // 获得此模型的公共属性      
        PropertyInfo[] propertys = t.GetType().GetProperties(); 
       foreach (PropertyInfo pi in propertys)      
        {      
            tempName = pi.Name;  // 检查DataTable是否包含此列   
           if (dt.Columns.Contains(tempName))      
            {      
               // 判断此属性是否有Setter      
               if (!pi.CanWrite) continue;        
               object value = dr[tempName];      
               if (value != DBNull.Value)      
                    pi.SetValue(t, value, null);  
            }     
        }      
        ts.Add(t);      
    }     
   return ts;     
}     

 

posted @ 2019-11-01 14:30  裤兜  阅读(1221)  评论(0编辑  收藏  举报