zoukankan      html  css  js  c++  java
  • DataTable转成List

    DataTable转成List 

    //把一个Datatable 赋值给一个List对象

    //定义一个转换类

       public class ConvertTool
        {
            public static List<T> DataConvert<T>(DataTable tb)
            {
                List<T> lst = new List<T>();
                DataConvert<T>(tb, ref lst);
                return lst;
            }
          
    
            public static List<T> DataConvert<T>(DataTable tb, ref List<T> lst)
            {
                for (int i = 0; i < tb.Rows.Count; i++)
                {
                    lst.Add(DataConvert<T>(tb.Rows[i]));
                }
                return lst;
            }
            public static T DataConvert<T>(DataRow row)
            {
    //泛型 根据传来的类型创建实例对象
    var type = typeof(T); object obj = type.Assembly.CreateInstance(type.FullName); var c = (T)obj; DataConvert(row, ref c); return c; }
           //获取一个类对象的所有公共属性 遍历所有属性 并赋值
             public static T DataConvert<T>(DataRow row, ref T t) {
    var ps = t.GetType().GetProperties(); var tbColumns = row.Table.Columns; foreach (var c in ps) { var colName = c.Name; if (tbColumns.Contains(colName)) { object nr = row[colName] == DBNull.Value ? null : row[colName]; if (nr == null) { c.SetValue(t, nr, null); } else { var nrType = c.PropertyType; if (nrType == typeof(decimal) || nrType == typeof(decimal?)) { nr = Convert.ToDecimal(nr); } else if (nrType == typeof(Int64) || nrType == typeof(Int64?)) { nr = Convert.ToInt64(nr); } else if (nrType == typeof(double) || nrType == typeof(double?)) { nr = Convert.ToDouble(nr); } else if (nrType == typeof(Int32) || nrType == typeof(Int32?)) { nr = Convert.ToInt32(nr); } else if (nrType == typeof(Int16) || nrType == typeof(Int16?)) { nr = Convert.ToInt16(nr); } c.SetValue(t, nr, null); } } } return t; } }

    定义一个测试的实体类 

    多种类型全部用上

       public class TestClass
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public decimal Money { get; set; }
            public bool IsValid { get; set; }
            public DateTime BirthDay { get; set; }
    
        }

    方法调用及显示结果

     public class Program
        {
            static void Main(string[] args)
            {
                //定义一个DataTable 并赋值
                DataTable dt = new DataTable("dtTest");
                DataColumn dc = null;
                dc = dt.Columns.Add("Id", Type.GetType("System.Int32"));
                dc = dt.Columns.Add("Name", Type.GetType("System.String"));
                dc = dt.Columns.Add("Money", Type.GetType("System.Decimal"));
                dc = dt.Columns.Add("IsValid", Type.GetType("System.Boolean"));
                dc = dt.Columns.Add("BirthDay", Type.GetType("System.DateTime"));
                DataRow newRow;
                newRow = dt.NewRow();
                newRow["Id"] = "1";
                newRow["Name"] = "测试1";
                newRow["IsValid"] = true;
                newRow["Money"] = 100.00m;
                newRow["BirthDay"] = DateTime.Now ;
                dt.Rows.Add(newRow);
    
                newRow = dt.NewRow();
                newRow["Id"] = "2";
                newRow["Name"] = "测试2";
                newRow["IsValid"] = true;
                newRow["Money"] = 100.00m;
                newRow["BirthDay"] = DateTime.Now;
                dt.Rows.Add(newRow);
    
                //调用DataTable转成List
                List<TestClass> Li = ConvertTool.DataConvert<TestClass>(dt); 
            }
        }

    现在有很多流行的ORM框架,直接取出来对象数据很方便,不用再转。实现原理大同小异;

  • 相关阅读:
    (三)索引分区知识详解
    (二)SQL Server分区创建过程
    (一)SQL Server分区详解Partition(目录)
    表格重新加载 where 携带上次值问题
    MongoDB 时差问题问题
    WebAPI跨域处理
    Http请求中 content-type 和 dataType 区别
    那些坑
    微信公众平台开发系列一 ~ 接入前的配置工作
    MVC中登录页图片验证码总结
  • 原文地址:https://www.cnblogs.com/AnchorRon/p/11390060.html
Copyright © 2011-2022 走看看