利用.net中的反射实现将DataTable转换为List集合、类实体模型

文章介绍了如何使用C#将DataTable类型转换为指定类型的List集合以及单个实体模型,通过泛型和属性遍历来实现灵活的数据映射。
摘要由CSDN通过智能技术生成

 1、将DataTable类型转换为指定类型的List集合

 /// <summary>
 /// 将DataTable类型转换成List类型
 /// </summary>
 /// <typeparam name="T">需要转换List集合的实体类型</typeparam>
 /// <param name="dt">转换为List集合的DataTable</param>
 /// <returns>转换后的list集合</returns>
 public static List<T> ConvertDataTableToList<T>(DataTable dt) where T : new()//泛型约束,用于可以实例化T对象
 {
     List<T> list = new List<T>();
     Type type = typeof(T);
     for (int i = 0; i < dt.Rows.Count; i++)
     {
         T t = new T();
         PropertyInfo[] properties = type.GetProperties();
         foreach (PropertyInfo item in properties)
         {

             if (item.CanWrite && dt.Columns.Contains(item.Name))
             {
                 object value = dt.Rows[i][item.Name];
                 if (value != DBNull.Value) // 检查是否为空值
                 {
                     item.SetValue(t, value);
                 }
             }
         }
         list.Add(t);
     }
     return list;
 }

上述代码中:List<T>

<T> 是一个泛型参数,它在这个方法中表示一个占位符,可以接受任意类型作为参数。通过使用泛型参数,可以使方法在不同的类型上具有通用性和灵活性。

在这个方法中,<T> 告诉编译器我们希望在方法调用时指定一个具体的类型,以替代泛型参数 T。这允许我们根据需要将不同的类型传递给这个方法,它们会被替换为 T,将 DataTable 转换为指定类型的 List

例如,如果我们要将一个名为 Person 的自定义类转换为 DataTable,我们可以这样调用方法:

DataTable dt = // 从数据库或其他地方获取DataTable

List<Person> list = ConvertDataTableToList<Person>(dt);

在这个例子中,<T> 被替换为 Person,使方法能够将 DataTable 转换为包含 Person 对象的 List。这样,我们可以在不同的场景下使用相同的转换方法,只需要根据需要传递不同的类型。

2、将DataTable类型转换为类实体模型

 /// <summary>
 /// 将单条数据转换成实体模型
 /// </summary>
 /// <typeparam name="T">需要转换的实体模型的类型</typeparam>
 /// <param name="dt">转换为List集合的DataTable</param>
 /// <returns>返回单条数据的实体模型</returns>
 public static T ConvertDataToModel<T>(DataTable dt) where T : new()//泛型约束,用于可以实例化T对象
 {
     T t = new T();
     Type type = typeof(T);
     PropertyInfo[] property = type.GetProperties();
     foreach (PropertyInfo item in property)
     {
         if (item.CanWrite && dt.Columns.Contains(item.Name))
         {
             if (dt.Rows[0][item.Name] != DBNull.Value) // 检查是否为空值
             {
                 item.SetValue(t, dt.Rows[0][item.Name]);
             }
         }
     }
     return t;
 }

上述代码用于将 DataTable 中的单条数据转换为特定实体类型的实体模型。与前面的方法类似,它使用泛型参数 <T> 表示一个占位符,可以接受任意类型作为参数。

这个方法的实现逻辑是遍历实体类型的属性,检查 DataTable 中是否包含相应的列,并将列的值赋给实体属性。

通过条件 if (dt.Rows[0][item.Name] != DBNull.Value) 来检查是否为空值,以避免将 null 赋给实体属性。这一步操作也可以避免在类型转换过程中出现DataTable中某字段数据为null而出现程序报错的情况。

使用示例:

DataTable dt = // 从数据库或其他地方获取DataTable

Person personEntity = ConvertDataToModel<Person >(dt);

Person 是你要转换的实体类型。这样,你就可以将 DataTable 中的单条数据转换为指定类型的实体模型。

至此,上述两种方法就可以实现将DataTable中的数据转换为指定实体类型的List集合或者指定的单类实体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值