利用反射把Datatable转换成List


/// <summary>

       /// 利用反射将Datatable转换为List<T>对象

       /// </summary>

       /// <typeparam name="T">集合</typeparam>

       /// <param name="dt"> datatable对象</param>

       /// <returns></returns>

       public List<T> DataTableToList<T>(DataTable dt) where T : new()

       {

           //定义集合

           List<T> ts = new List<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))

                   {

                       //取值

                       object value = dr[tempName];

                       //如果非空,则赋给对象的属性

                       if (value != DBNull.Value)

                       {

                           //这里添加判断的原因:比如double转folat不能隐式转换,而枚举类型又不能使用Convert.ChangeType

                           if (pi.PropertyType.IsEnum)

                               {

                                   pi.SetValue(t, value, null);

                                }

                               else

                               {

                               //ChangeType属于强转可能存在数据丢失,但是pi.PropertyType是对应你类成员的类型

                               pi.SetValue(t, Convert.ChangeType(value, pi.PropertyType), null);

                                }

                           

                           }

                   }

               }

               //对象添加到泛型集合中

               ts.Add(t);

           }

           return ts;

       }

 
   

原文地址:https://www.cnblogs.com/yinjinli/p/11971362.html

时间: 2024-10-07 15:35:57

利用反射把Datatable转换成List的相关文章

利用反射把ResultSet转换成List

public static List toList(ResultSet rs, Class cls) { List list = new ArrayList(); try { // 获取数据库表结构 ResultSetMetaData meta = rs.getMetaData(); Object obj = null; while (rs.next()) { // 获取formbean实例对象 obj = Class.forName(cls.getName()).newInstance();

利用反射将Datatable、SqlDataReader转换成List模型

1. DataTable转IList 1 public class DataTableToList<T>whereT :new() 2 3 { 4 5 ///<summary> 6 7 ///利用反射将Datatable转换成List模型 8 9 ///</summary> 10 11 ///<param name="dt"></param> 12 13 ///<returns></returns> 1

如何将DataTable转换成List&lt;T&gt;呢?

昨日在工作中,遇到一个问题:需要将查询出来的DataTable数据源,转换成List<T>的泛型集合(已知T类型).第一反应,我想肯定要用到“泛型”(这不是废话吗?都说了要转换成List<T>泛型集合了),而且还要用到“反射”相关的.呵呵.很快,我就做出了一个小实例,测试通过.下面我将代码贴出来,分享给大家.代码都有详细的注释,读者朋友可以很清晰的看懂我的思路. 这是我写的一个通用转换类,完成此类操作 using System; using System.Collections.G

DataTable转换成IList&lt;T&gt;的简单实现

DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的高频率动作,DataTable却无能为力. 网上很多朋友说用反射实现.那么问题来了,一定要用反射吗? 下面我们用一个不用反射的方式实现: TableToList类 using System; using System.Collections.Generic; using System.Linq; u

ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)

原文:ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100) 对于非地理专业的开发人员,对与这些生涩的概念,我们不一定都要了解,但是我们要理解,凡是以经纬度为单位的都是地理坐标系,因为它归根结底是一个椭球体,只不过各个国家为了反映该国家所在区域地球的真实形状,而采用不同的数学模型对本不是椭球体的地球进行椭球体化.而投影坐标系,是对地理坐标系按照某种方式投影到平面上的,所以可以认为它是一个平面坐标系,单位自然是米或千米. 我们在做开发的时候,尤其

C#将DataTable转换成list的方法

本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary>   /// 酒店评论列表-分页  /// </summary>  /// <param name="userId"></param>  /// <param name="pageIndex">当前页</param>  /// <param name="

将DataTable转换成CSV文件

DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记.CSV文件是个纯文本文件,每一行表示一张图片的许多属性. 在.net项目中运用C#将DataTable转化为CSV文件,现在提供一个较为通用的方法,具体代码如下:         /// <summary>         /// 将DataTable转换成CSV文件         /// &

DataTable转换成List&lt;T&gt;

很多时候需要将DataTable转换成一组model,直接对model执行操作会更加方便直观. 代码如下: 1 public static class DataTableToModel 2 { 3 public static List<T> ConvertToModel<T>(this DataTable dt) 4 { 5 if (dt == null || dt.Rows.Count == 0) 6 { 7 return null; 8 } 9 10 var result =

将list&lt;对象&gt;转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其他的方法,不过这个方法已经实现,就写一下了: 1.创建表. CREATE TABLE [dbo].[person]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Pwd] [nvarchar](50) NULL, [Age]