zoukankan      html  css  js  c++  java
  • [工具类]泛型集合转换为DataTable

    写在前面

    在实际项目中,用到了将集合转换为DataTable,就试着封装了一个方法,记录一下。

    代码

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Wolfy.List2DataTable
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Person> lst = new List<Person>() 
                { 
                    new Person(){ ID=1, Gender=false, Name="wolfy1"},
                     new Person(){ ID=2, Gender=false, Name="wolfy2"},
                      new Person(){ ID=3, Gender=false, Name="wolfy3"},
                       new Person(){ ID=4, Gender=false, Name="wolfy4"},
                        new Person(){ ID=5, Gender=false, Name="wolfy5"},
                };
                DataTable dt = List2DataTable<Person>(lst);
                Console.WriteLine("转换结束");
                Console.Read();
            }
            /// <summary>
            /// 将泛型集合转换为datatable
            /// </summary>
            /// <typeparam name="TEntity"></typeparam>
            /// <param name="entities"></param>
            /// <returns></returns>
            static DataTable List2DataTable<TEntity>(List<TEntity> entities)
            {
                if (entities == null)
                {
                    throw new ArgumentNullException("转换的集合为空");
                }
                Type type = typeof(TEntity);
                PropertyInfo[] properties = type.GetProperties();
                DataTable dt = new DataTable(type.Name);
                foreach (var item in properties)
                {
                    dt.Columns.Add(new DataColumn(item.Name) { DataType = item.PropertyType });
                }
                foreach (var item in entities)
                {
                    DataRow row = dt.NewRow();
                    foreach (var property in properties)
                    {
                        row[property.Name] = property.GetValue(item);
                    }
                    dt.Rows.Add(row);
                }
                return dt;
            }
        }
        public class Person
        {
            public int ID { set; get; }
            public string Name { set; get; }
            public bool Gender { set; get; }
        }
    }

    测试结果:

  • 相关阅读:
    Indexed DB入门导学(1)
    移动端touch事件封装
    javascript实现仿微信抢红包
    NODE学习:利用nodeJS去抓网页的信息
    ajax跨域请求无法携带cookie的问题
    四则运算
    wc
    我的问题
    css3新增加的属性
    css知识点回顾(一)
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/4593064.html
Copyright © 2011-2022 走看看