.net C# List转换成为DataTable

很多场景下,我们需要将List转换成为DataTable,那么我们应该怎么处理呢?

代码如下:

        /// 
        /// 将List转换为DataTable
        /// 
        /// 请求数据
        /// 
        public static DataTable ListToDataTable(List list)
        {
            //创建一个名为"tableName"的空表
            DataTable dt = new DataTable("tableName");

            //创建传入对象名称的列
            foreach (var item in list.FirstOrDefault().GetType().GetProperties())
            {
                dt.Columns.Add(item.Name);
            }
            //循环存储
            foreach (var item in list)
            {
                //新加行
                DataRow value = dt.NewRow();
                //根据DataTable中的值,进行对应的赋值
                foreach (DataColumn dtColumn in dt.Columns)
                {
                    int i = dt.Columns.IndexOf(dtColumn);
                    //基元元素,直接复制,对象类型等,进行序列化
                    if (value.GetType().IsPrimitive)
                    {
                        value[i] = item.GetType().GetProperty(dtColumn.ColumnName).GetValue(item);
                    }
                    else
                    {
                        value[i] = JsonConvert.SerializeObject(item.GetType().GetProperty(dtColumn.ColumnName).GetValue(item));
                    }
                }
                dt.Rows.Add(value);
            }
            return dt;
        }

根据上面的代码,你可以发现以下.net的技术:

1.使用了泛型:

泛型是程序设计语言的一种特性,允许在代码编写的时候,可以使用一些可变的部分,.net中常常会将其当做占位符,比如说,类,结构,接口和方法的占位符,使用T来表示。

2.创建DataTable的流程:

  • 创建表
  • 创建对应的列
  • 对列进行赋值并添加

3.foreach循环:

foreach语句为数组或对象集合中的每个元素重复一个嵌入语句组。但需要注意的事情是:只能对信息进行获取,不该对集合进行更改,防止产生不可预知的副作用,比如说删除集合中的元素的操作。

4.反射:

程序中的反射指程序可以访问,检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集,模块和类型的对象。可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

5.序列化:

将对象的状态信息转换为可以存储或传输的形式过程。

6.需要引用到的程序集:

using System.Collections.Generic;

using System.Data;

using System.Linq;

using Newtonsoft.Json;

7.调试过程中,如果需要看DataTable的值,可以将鼠标移至值,点击右侧的放大镜,可以看到:

.net C# List转换成为DataTable_第1张图片

你可能感兴趣的:(ASP.NET)