zoukankan      html  css  js  c++  java
  • 把DataTable转换为List<T>

    前一篇有学习过《把List<T>转换为DataTablehttp://www.cnblogs.com/insus/p/8043173.html


    那此篇,将是学习反向,把DataTable转换为List<T>。这个方法使用的较多。很多情况之后,从数据读出来的数据是DataSet或是DataTable。需要把它们转换为List<T>之后,再转换为json。

    下面Insus.NET写一个扩展方法:

     public static List<T> ToList<T>(this DataTable dt)
            {
                var dataColumn = dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName).ToList();
    
                var properties = typeof(T).GetProperties();
                string columnName = string.Empty;
    
                return dt.AsEnumerable().Select(row =>
                {
                    var t = Activator.CreateInstance<T>();
                    foreach (var p in properties)
                    {
                        columnName = p.Name;
                        if (dataColumn.Contains(columnName))
                        {
                            if (!p.CanWrite)
                                continue;
    
                            object value = row[columnName];
                            Type type = p.PropertyType;
    
                            if (value != DBNull.Value)
                            {
                                p.SetValue(t, Convert.ChangeType(value, type), null);
                            }
                        }
                    }
                    return t;
                }).ToList();
            }
    Source Code

    接下来,手动创建一个DataTable,添加一些数据行。对象是引用前一篇的对象:

     class Ba
        {
            public void ConvertDataTableToListToTestDemo()
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("ID", typeof(int));
                dt.Columns.Add("Account", typeof(string));
                dt.Columns.Add("Email", typeof(string));
    
                dt.Rows.Add(1, "A0001", "A0001@email.com");
                dt.Rows.Add(2, "A0002", "A0002@email.com");
                dt.Rows.Add(3, "A0003", "A0003@email.com");
    
                List<Ay> ays = dt.ToList<Ay>();
    
                ays.ForEach(delegate (Ay ay)
                {
                    Console.WriteLine(ay.ToString());
                });
                
                Console.WriteLine("
    
    ");
            }
        }
    Source Code

    上图红框即是#23行代码,就是本篇的核心代码,把DataTable转换为List<T>。

    在控制台测试一下代码:

  • 相关阅读:
    input 正则
    .net ashx Session 未将对象引用到实例
    js 时间和时间对比
    c# Repeater 和 AspNetPager
    c#后台 极光推送到Android 和IOS客户端
    select scope_identity()
    redhat7.4安装git(按照官网从源码安装)
    redhat7.4安装gitlab
    ES6模板字符串
    初次接触webpack
  • 原文地址:https://www.cnblogs.com/insus/p/8043805.html
Copyright © 2011-2022 走看看