C# DataTable类型 转换成 List集合类型的方法

本文介绍了一种将DataTable转换为List的通用方法,通过泛型和反射技术实现数据类型的灵活转换,适用于C#环境下需要进行大量数据处理的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

我们从数据库里读取出来的数据一般都是DataTable数据类型,但是操作这样的数据类型没有“泛型集合模型”数据类型方便

更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。

技能栈:泛型+反射

转换帮助类代码:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace AirTicketWinform
{
   public class ModelConvertHelper<T> where   T : new()
    {
        public static List<T> ConvertToModel(DataTable dt)    
         {    
            // 定义集合    
             List<T> ts = new List<T>(); 
     
            // 获得此模型的类型   
             Type type = typeof(T);      
            string tempName = "";      
      
            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 is string)
                            {
                                value = value.ToString().Trim(); 
                            }
                            if (value != DBNull.Value)
                            {
                                pi.SetValue(t, value, null);
                            }
                     }     
                 }      
                 ts.Add(t);      
             }     
            return ts;     
         }     
    }
}

 调用转换代码:

        List<RegionModel> regionDataTable=null;
        /// <summary>
        /// 获取航线列表
        /// </summary>
        private void RegionDataTable()
        { 
            string sql = "select id, name from Region";
            DataTable dt=DBHelper.GetDataTable(sql);

            //调用DataTable类型 转换成 List集合类型 帮助类
            regionDataTable= ModelConvertHelper<RegionModel>.ConvertToModel(dt);
         }

参与资料:

C# DataTable 和List之间相互转换的方法

C# DataTable 和List之间相互转换的方法 - Mr.石 - 博客园

List与IList的区别

List与IList的区别 - 金河 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙-极纪元JJYCheng

客官,1分钱也是爱,给个赏钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值