zoukankan      html  css  js  c++  java
  • 【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;     
    }     
  • 相关阅读:
    java数据结构:二叉树
    java数据结构:队列
    java数据结构:堆栈
    nosql初探索:linux安装redis数据库
    javaweb成长之路:SSM框架搭建
    struts2在继承ActionSupport时,在导入package前面出现错误
    ognl.NoSuchPropertyException
    第八届蓝桥杯省赛B组c++_方格分割
    第八届蓝桥杯省赛B组c++_承压计算
    第八届蓝桥杯省赛B组c++_等差素数列
  • 原文地址:https://www.cnblogs.com/512kd/p/11776818.html
Copyright © 2011-2022 走看看