C#把list转化为Datatable

来源:互联网 发布:时时彩服务器源码 编辑:程序博客网 时间:2024/06/05 14:27

使用linq的时候,经常需要 select new{ ...不固定的字段... }  ,如何读取这些字段的单个值?通常两种做法:1)object对象反射是可以做的  2)在反射的基础上,转化为datatable 也可以

如下实例:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using ConsoleApplication1;using System.Data;using System.Collections;using System.Reflection;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)         {            /*创建数据源*/            List<myclass> l = new List<myclass>();            for (int i = 0; i < 10; i++)            {                myclass mc = new myclass();                mc.age = i;                mc.name = "myname" + i;                l.Add(mc);            }            /*创建datatable*/            DataTable dt = new DataTable();            /*返回一个有任意字段的 List<Object>对象,   select new 中的namefull就是自己随意添加的字段*/            List<Object> rs = (from r in l select new { name = r.name, namefull = r.name + r.age, age = r.age }).ToList<Object>();            /*把List<Object>对象转化为Datatable对象*/            dt = ToDataTableTow(rs);            /*读取Datatable对象*/            foreach (DataRow dr in dt.Rows)            {                /*按照拼接的字段名称 读取内容*/                Console.WriteLine(dr["name"].ToString() +"-----------------"+ dr["namefull"].ToString());            }            Console.Read();        }        /// <summary>          /// 将集合类转换成DataTable          /// </summary>          /// <param name="list">集合</param>          /// <returns></returns>          public static DataTable ToDataTableTow(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;        }    }    public class myclass    {        public string name;        public int age;    }}

结果:




0 0
原创粉丝点击