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

在C#中,将 DataTable 转换为泛型 List<t></t> 是常见需求,核心思路是:**通过反射获取目标类型 T 的属性,逐行读取 DataTable 的数据并映射赋值**。关键在于字段名与属性名的匹配、类型转换的安全处理,以及性能优化。
这是最常用、可复用的方式,适合大多数自定义实体类:
ColumnName)完全一致(不区分大小写更稳妥)示例代码:
public static List<T> ToList<T>(DataTable dt) where T : new()
{
var list = new List<T>();
var properties = typeo
f(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>
如果 DataTable 结构固定、实体简单,可用更简洁的 LINQ 写法:
Chatbase
从你的知识库中构建一个AI聊天机器人
117
查看详情
System.Data.DataSetExtensions(需引用对应 NuGet 包或框架内置)示例:
var list = dataTable.AsEnumerable()
.Select(row => new User
{
Id = row.Field<int>("Id"),
Name = row.Field<string>("Name"),
BirthDate = row.Field<DateTime?>("BirthDate")
}).ToList();实际使用中容易出错的点:
StringComparer.OrdinalIgnoreCase 或统一转小写比对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 内部做了优化)
基本上就这些。选反射通用版还是 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
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。