zoukankan      html  css  js  c++  java
  • .Net中List<T> 泛型转成DataTable、DataSet

    在开发过程过程中有时候需要将List<T>泛型转换成DataTable、DataSet,可以利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值。

    1、List<T>泛型转换成DataTable 代码:

            /// <summary>
            /// List<T>转换成DataTable  
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="list"></param>
            /// <param name="dataList">集合数据</param>
            /// <returns>返回DataTable</returns>
            public static System.Data.DataTable ToDataTable<T>(this System.Collections.Generic.IList<T> list, System.Collections.Generic.IList<T> dataList) where T : class ,new()
            {
                if (dataList == null || !dataList.Any())
                {
                    return null;
                }
                Type type = typeof(T);
                System.Data.DataTable dt = new System.Data.DataTable(type.Name);
                System.Reflection.PropertyInfo[] propertyInfoArray = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                foreach (T t in dataList.Where(t => t != null))
                {
                    System.Data.DataRow row = dt.NewRow();
                    for (int i = 0, j = propertyInfoArray.Length; i < j; i++)
                    {
                        System.Reflection.PropertyInfo propertyInfo = propertyInfoArray[i];
                        string name = propertyInfo.Name;
                        if (dt.Columns[name] == null)
                        {
                            System.Data.DataColumn column = new System.Data.DataColumn(name, propertyInfo.PropertyType);
                            dt.Columns.Add(column);
                        }
                        row[name] = propertyInfo.GetValue(t, null);
                    }
                    dt.Rows.Add(row);
                }
                return dt;
            }

    2、List<T>泛型转换成DataSet 代码:

             /// <summary>
            /// List<T>转换成DataSet  
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="list"></param>
            /// <param name="dataList">集合数据</param>
            /// <returns>返回DataSet</returns>
            public static System.Data.DataSet ToDataSet<T>(this System.Collections.Generic.IList<T> list, System.Collections.Generic.IList<T> dataList) where T : class ,new()
            {
                if (dataList == null || !dataList.Any())
                {
                    return null;
                }
                Type type = typeof(T);
                System.Data.DataSet ds = new System.Data.DataSet();
                System.Data.DataTable dt = new System.Data.DataTable(type.Name);
                System.Reflection.PropertyInfo[] propertyInfoArray = type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
                foreach (T t in dataList.Where(t => t != null))
                {
                    System.Data.DataRow row = dt.NewRow();
                    for (int i = 0, j = propertyInfoArray.Length; i < j; i++)
                    {
                        System.Reflection.PropertyInfo propertyInfo = propertyInfoArray[i];
                        string name = propertyInfo.Name;
                        if (dt.Columns[name] == null)
                        {
                            System.Data.DataColumn column = new System.Data.DataColumn(name, propertyInfo.PropertyType);
                            dt.Columns.Add(column);
                        }
                        row[name] = propertyInfo.GetValue(t, null);
                    }
                    dt.Rows.Add(row);
                }
                ds.Tables.Add(dt);
                return ds;
            }
  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/linJie1930906722/p/6045090.html
Copyright © 2011-2022 走看看