TList To DataTable

using System;
 using System.Collections.Generic;
using System.Linq;
using System.Text;
 using System.Data;
 using System.Collections;
using System.Reflection;
 namespace DatableToList
{
    class ConvertHelper<T> where T : new()
     {
        /// <summary>
        /// 利用反射和泛型
        /// </summary>
        /// <param name="dt"></param>
         /// <returns></returns>
         public static List<T> ConvertToList(DataTable dt)
        {  

             // 定义集合
            List<T> ts = new List<T>();  

             // 获得此模型的类型
            Type type = typeof(T);
            //定义一个临时变量
             string tempName = string.Empty;
             //遍历DataTable中所有的数据行
            foreach (DataRow dr in dt.Rows)
             {
                 T t = new T();
                 // 获得此模型的公共属性
                PropertyInfo[] propertys = t.GetType().GetProperties();
                //遍历该对象的所有属性
                foreach (PropertyInfo pi in propertys)
               {
                   tempName = pi.Name;//将属性名称赋值给临时变量
                     //检查DataTable是否包含此列(列名==对象的属性名)
                    if (dt.Columns.Contains(tempName))
                   {
                        // 判断此属性是否有Setter
                       if (!pi.CanWrite) continue;//该属性不可写,直接跳出
                        //取值
                       object value = dr[tempName];
                         //如果非空,则赋给对象的属性
                         if (value != DBNull.Value)
                            pi.SetValue(t, value, null);
                    }
                 }
                 //对象添加到泛型集合中
                ts.Add(t);
            }
             return ts;  

         }
     }
}  
/// <summary>
        /// 将集合类转换成DataTable
        /// </summary>
        /// <param name="list">集合</param>
        /// <returns></returns>
        public static DataTable ToDataTable(IList list)
        {
            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    result.Columns.Add(pi.Name, pi.PropertyType);
                }
                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        object obj = pi.GetValue(list[i], null);
                        tempList.Add(obj);
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }
        /// <summary>
        /// 将泛型集合类转换成DataTable
        /// </summary>
        /// <typeparam name="T">集合项类型</typeparam>
        /// <param name="list">集合</param>
        /// <returns>数据集(表)</returns>
        public static DataTable ToDataTable<T>(IList<T> list)
        {
            return ConvertX.ToDataTable<T>(list, null);
        }
        /// <summary>
        /// 将泛型集合类转换成DataTable
        /// </summary>
        /// <typeparam name="T">集合项类型</typeparam>
        /// <param name="list">集合</param>
        /// <param name="propertyName">需要返回的列的列名</param>
        /// <returns>数据集(表)</returns>
        public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
        {
            List<string> propertyNameList = new List<string>();
            if (propertyName != null)
                propertyNameList.AddRange(propertyName);
            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    if (propertyNameList.Count == 0)
                    {
                        result.Columns.Add(pi.Name, pi.PropertyType);
                    }
                    else
                    {
                        if (propertyNameList.Contains(pi.Name))
                            result.Columns.Add(pi.Name, pi.PropertyType);
                    }
                }
                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        if (propertyNameList.Count == 0)
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        else
                        {
                            if (propertyNameList.Contains(pi.Name))
                            {
                                object obj = pi.GetValue(list[i], null);
                                tempList.Add(obj);
                            }
                        }
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }
时间: 2024-11-05 15:59:47

TList To DataTable的相关文章

TList、DataTable To Json

public static string Obj2Json<T>(T data) { try { System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType()); using (MemoryStream ms = new MemoryStream())

将DataTable转换为List,将List转换为DataTable的实现类

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Xmh.DBUnit { /// <summary> /// 将DataTable转换为List,将

删除datatable中的行

今天遇到一问题,无论如何也删除不干净datatable.我想全部删除.但总是得不到想要的结果. for (int i = 0; i < dt.Rows.Count; i++) { //dt.Rows.Remove(dt.Rows[i]); dt.Rows[i].Delete(); Console.Write("dr.rows.count" + dt.Rows.Count + "\r\n删除了数据" + i.ToString() + "\r\n&quo

datatable

datatable添加数据 datatable dt=new datatable(); dt.columns.add("string");     //添加列 datarow dr=dt.newrow(); dr[0]="string"; dt.rows.add(dr);          //添加行

c# 之DataTable的扩展方法

由于太懒了,很久没更新了.毕业了,得好好装逼学习了,不能一心想着完了. 由于公司中的项目大量的使用DataTable,而每次对datatable进行操作的时候需要写很多相同的代码,所以秉着 装逼而学习 的态度,于是撸了几个扩展方法,记录下来,学习下.     class Program     {         public DataTable LinqTable = new DataTable();         void AddNewRow(int id, string name)   

ASP.Net的导出Excel的快速方法,DataTable导出Excel(亲测,非原创)

//使用方法 ExcelHelper.dataTableToCsv(dt,@"D:\1212.xls");System.Diagnostics.Process.Start(@"c:\1.xls"); //打开excel文件 public static void dataTableToCsv(DataTable table, string file) { string title = ""; FileStream fs = new FileStre

(转)在JAVA实现DataTable对象(三)——DataTable对象实现

大家都是行家,我就直接上代码了,我这个代码应该还是能看懂的,嘻嘻…. 1: import java.util.ArrayList; 2: import java.util.List; 3:   6:   7: public final class DataTable { 8:   9: private DataRowCollection rows; //用于保存DataRow的集合对象 10: private DataColumnCollection columns; //用于保存DataCol

几个和DataTable相关的函数

一.关于本文 本文中的DataTableHelper类包括了4个操作DataTable的函数,分别是 1)public static DataTable GetTestDataTable() 这是一个测试用的函数,生成一个有内容的DataTable 2)public static string PrintDataTable(DataTable dt) 这个函数向控制台打印一个DataTable中的所有内容 3)public static DataTable GetAnotherDataTable

List转Datatable 新方法

方法1,最简单的转换 DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); dt.Rows.Add(new object[]{ 0,"顶层菜单"}); foreach (var cm in comdList) { DataRow dr = dt.NewRow(); dr["id"] = cm.SYS_COMMANDS_ID;