C#怎么将DataTable转换为List C#数据表转泛型列表方法


C#中DataTable转List推荐反射通用法:属性名与列名不区分大小写匹配,自动处理基础类型及可空类型,跳过不匹配列和DBNull值;LINQ法简洁但需手动处理类型转换和DBNull。

c#怎么将datatable转换为list c#数据表转泛型列表方法

在C#中,将 DataTable 转换为泛型 List<t></t> 是常见需求,核心思路是:**通过反射获取目标类型 T 的属性,逐行读取 DataTable 的数据并映射赋值**。关键在于字段名与属性名的匹配、类型转换的安全处理,以及性能优化。

使用反射 + 泛型方法(推荐,通用性强)

这是最常用、可复用的方式,适合大多数自定义实体类:

  • 要求实体类属性名与 DataTable 列名(ColumnName)完全一致(不区分大小写更稳妥)
  • 自动处理基础类型(int、string、DateTime 等)和可空类型(int?、DateTime?)
  • 跳过不匹配的列或无法转换的值,避免运行时异常

示例代码:

public static List<T> ToList<T>(DataTable dt) where T : new()
{
    var list = new List<T>();
    var properties = typeof(T).GetProperties().ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase);
<pre class="brush:php;toolbar:false;">foreach (DataRow row in dt.Rows)
{
    var obj = new T();
    foreach (var prop in properties.Values)
    {
        if (dt.Columns.Contains(prop.Name) && row[prop.Name] != DBNull.Value)
        {
            try
            {
                var value = Convert.ChangeType(row[prop.Name], prop.PropertyType);
                prop.SetValue(obj, value);
            }
            catch { /* 类型不兼容时跳过该字段 */ }
        }
    }
    list.Add(obj);
}
return list;

}

调用方式:var users = ToList<user>(dataTable);</user>

使用 LINQ + DataRowExtensions(.NET Framework 3.5+ / .NET Core 3.0+)

如果 DataTable 结构固定、实体简单,可用更简洁的 LINQ 写法:

Chatbase Chatbase

从你的知识库中构建一个AI聊天机器人

Chatbase 117 查看详情 Chatbase
  • 依赖 System.Data.DataSetExtensions(需引用对应 NuGet 包或框架内置)
  • 适合快速原型或单次转换,可读性高
  • 需手动处理类型转换和 DBNull,灵活性略低

示例:

var list = dataTable.AsEnumerable()
    .Select(row => new User
    {
        Id = row.Field<int>("Id"),
        Name = row.Field<string>("Name"),
        BirthDate = row.Field<DateTime?>("BirthDate")
    }).ToList();

注意字段映射与类型安全

实际使用中容易出错的点:

  • 列名大小写敏感:DataTable 列名默认区分大小写,建议用 StringComparer.OrdinalIgnoreCase 或统一转小写比对
  • DBNull 处理:必须检查 row[colName] != DBNull.Value,否则 Convert.ChangeType 会抛异常
  • 可空类型支持:如 int?,要确保源值为 null 或能转为目标基础类型,Field<t>()</t> 方法内部已处理
  • 日期/时间格式:数据库中可能存字符串,需提前清洗或自定义转换逻辑

性能优化小提示

大数据量时可提升效率:

  • 预先缓存 PropertyInfo[] 和列索引(如 dt.Columns.IndexOf("Name")),避免每次循环重复查找
  • foreach (DataRow row in dt.Rows)for (int i = 0; i 更高效(DataTable 内部做了优化)
  • 若确定无 DBNull 且类型严格匹配,可省略 try-catch,但务必确保数据质量

基本上就这些。选反射通用版还是 LINQ 简洁版,取决于你的项目规范、数据稳定性和维护成本。不复杂但容易忽略细节,尤其在跨数据库或历史数据迁移场景下。

以上就是C#怎么将DataTable转换为List C#数据表转泛型列表方法的详细内容,更多请关注其它相关文章!


# ai  # c#  # .net  # 转换为  # 跳过  # 自定义  # 如何实现  # 怎么处理  # 不匹配  # 大数据  # 相关文章  # 线下微信互动营销推广  # 网络推广主要针对网站吗  # 钢材营销推广方案范文  # 公司网站推广该怎么做  # 河南网站建设基本流程  # 湖北seo推广介绍公司  # 如何找医生网站推广方案  # 湘潭360网站推广  # 中文网  # 加载  # 这是  # 多角度拍摄产品网站推广  # 遵义网站seo搜索引擎优化 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《单词速记宝》设置学习计划方法  微信步数怎么刷_微信步数快速提升技巧  如何在CSS中使用伪类选择器_hover实现悬停效果  192.168.1.1路由器后台入口 192.168.1.1默认登录入口  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  抖音评论无法发送如何修复 抖音评论功能操作指南  《咸鱼之王》新版孙坚技能解析  构建可配置的J*aScript加权点击计数器与共享总计功能  申通快递查询 申通物流快递单实时查询入口  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  Coolpad5890 ROM刷机包  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  快手极速版在线体验区 快手极速版网页体验入口  微信网页版在线登录 微信网页版在线使用入口  感染了幽门螺杆菌一定会导致胃癌吗?蚂蚁庄园今日答案最新11.30  Three.js中动态更换3D模型纹理的教程  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  抖音商城官网是什么_抖音商城官方网址与访问方法  ao3入口镜像地址 ao3镜像入口可靠跳转  胃动力不足?试试这5个调理方法  《优志愿》修改手机号方法  j*a中ArrayBlockingQueue的使用  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  AngularJS动态内容中DOM元素查找的时序问题及$timeout解决方案  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  《雷电模拟器》自动点击设置方法  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  《搜书吧》阅读书籍方法  Dash应用多值文本输入处理与类型转换教程  如何在mysql中比较InnoDB和MyISAM区别  Python定时发送QQ消息  微信如何设置字体大小_微信字体设置的阅读舒适  抖音小程序怎么开通?小程序开通条件是什么?  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  C++ cast类型转换总结_C++ reinterpret_cast与const_cast的使用  解决Go encoding/json 将JSON大数字解析为浮点数的问题  todesk如何添加信任设备_todesk信任设备设置教程  sublime怎么在文件中显示代码结构大纲_sublime符号列表功能  深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  b站如何管理订阅_b站订阅标签分类管理  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留 

 2025-12-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.