zoukankan      html  css  js  c++  java
  • C# DataTable 转换成List<T>

    运用泛型和反射实现的转换,很给力。代码中掺杂详尽注释,稍微了解一下泛型和反射便可以了解转换的实质。可以直接复制粘贴进行调用哦。
    public class DtConverToList<T> where T : new()
    {
        public static List<T> DtToList(DataTable dt)
        {
            //定义集合
            List<T> ListCollection = new List<T>(dt.Rows.Count);
            //获得 T 模型类型
            Type T_type = typeof(T);
            //获得 T 模型类型公共属性
            PropertyInfo[] Proper = T_type.GetProperties();
            //临时变量,存储变量模型公共属性Name
            string Tempname = "";
            //遍历参数 DataTable的每行
            foreach (DataRow Dr in dt.Rows)
            {
                //实例化 T 模版类
                T t = new T();
                //遍历T 模版类各个属性
                #region
                foreach (PropertyInfo P in Proper)
                {
                    //取出类属性之一
                    Tempname = P.Name;
                    //判断DataTable中是否有此列
                    if (dt.Columns.Contains(Tempname))
                    {
                        //判断属性是否可写属性
                        if (!P.CanWrite)
                        {
                            continue;
                        }
                        try
                        {
                            //得到Datable单元格中的值
                            object value = Dr[Tempname];
                            //得到 T 属性类型
                            Type ProType = P.PropertyType;
                            //判断类型赋值
                            if (value != DBNull.Value)
                            {
                                //
                                if (value.GetType() == ProType)
                                {
                                    P.SetValue(t, value, null);
                                }
                                else
                                {
                                    if (ProType == typeof(string))
                                    {
                                        string Temp = value.ToString();
                                        P.SetValue(t, Temp, null);
                                    }
                                    else if (ProType == typeof(byte))
                                    {
                                        byte Temp = Convert.ToByte(value);
                                        P.SetValue(t, Temp, null);
                                    }
                                    else if (ProType == typeof(short))
                                    {
                                        short Temp = short.Parse(value.ToString());
                                        P.SetValue(t, Temp, null);
                                    }
                                    else if (ProType == typeof(long))
                                    {
                                        long Temp = long.Parse(value.ToString());
                                        P.SetValue(t, Temp, null);
                                    }
     
                                    else if (ProType == typeof(Int64))
                                    {
                                        Int64 Temp = Convert.ToInt64(value);
                                        P.SetValue(t, Temp, null);
                                    }
                                    else if (ProType == typeof(Int32))
                                    {
                                        Int32 Temp = Convert.ToInt32(value);
                                        P.SetValue(t, Temp, null);
                                    }
                                    else if (ProType == typeof(Int16))
                                    {
                                        Int16 Temp = Convert.ToInt16(value);
                                        P.SetValue(t, Temp, null);
                                    }
                                    else
                                    {
                                        object Temp = Convert.ChangeType(value, ProType);
                                        P.SetValue(t, Temp, null);
                                    }
                                }
                            }
                        }
                        catch (Exception)
                        {
     
                            throw;
                        }
                    }
                }
                #endregion
                ListCollection.Add(t);
            }
            return ListCollection;
        }
    }
    View Code
  • 相关阅读:
    Item 16: 让const成员函数做到线程安全
    学习张鑫旭大神元素抛物线运动插件
    js根据浏览器对css3移动的支持,选择元素移动方式
    如何在图片加载完成前获取到图片宽高
    JavaScript和SVG实现点击连线
    多层级叠加问题
    闭包应用
    展示触摸屏网页打包成桌面应用(nw.js)
    获取鼠标坐标
    常用文档
  • 原文地址:https://www.cnblogs.com/yangkang0909/p/4632445.html
Copyright © 2011-2022 走看看