新闻中心
.NET怎么将DataTable转换为List对象_DataTable转List方法教程
答案:在.NET开发中,DataTable可转换为List以便进行LINQ操作,常用方法包括反射自动映射和手动映射。反射法通用性强,支持属性名与列名一致的自动匹配及可空类型处理;手动法性能更高,适用于字段多或高频率场景,但需为每个实体编写专用代码。还可将反射逻辑封装为DataTable的扩展方法,提升代码复用性和可维护性。根据性能和灵活性需求选择合适方式即可。

在 .NET 开发中,经常需要将 DataTable 转换为 List
使用反射自动映射 DataTable 到 List
这是最通用的方法,适用于大多数实体类。只需要确保实体类的属性名与 DataTable 的列名一致。
示例代码:
public static List<T> DataTableToList<T>(DataTable dt) where T : new()
{
var list = new List<T>();
foreach (DataRow row in dt.Rows)
{
var entity = new T();
var type = typeof(T);
var properties = type.GetProperties();
foreach (var property in properties)
{
if (dt.Columns.Contains(property.Name) && !row.IsNull(property.Name))
{
var value = row[property.Name];
// 处理可空类型
var propType = property.PropertyType;
if (propType.IsGenericType && propType.GetGenericTyp
eDefinition() == typeof(Nullable<>))
{
propType = Nullable.GetUnderlyingType(propType);
}
var convertedValue = Convert.ChangeType(value, propType);
property.SetValue(entity, convertedValue, null);
}
}
list.Add(entity);
}
return list;
}
说明: 该方法利用反射遍历 DataTable 的每一行和每个属性,自动匹配列名与属性名,并进行类型转换。支持可空类型(如 int?、DateTime?)。
手动映射(适用于性能要求高的场景)
如果对性能有较高要求,或者字段较多,手动映射效率更高,避免反射开销。
示例:假设有一个实体类:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime? BirthDate { get; set; }
}
转换方法:
小云雀
剪映出品的AI视频和图片创作助手
1949
查看详情
public static List<User> DataTableToUserList(DataTable dt)
{
var list = new List<User>();
foreach (DataRow row in dt.Rows)
{
var user = new User
{
Id = row["Id"] != DBNull.Value ? Convert.ToInt32(row["Id"]) : 0,
Name = row["Name"]?.ToString(),
BirthDate = row["BirthDate"] != DBNull.Value ? (DateTime?)Convert.ToDateTime(row["BirthDate"]) : null
};
list.Add(user);
}
return list;
}
优点: 执行速度快,控制更精细;缺点: 需要为每个实体写专用方法。
使用扩展方法提升代码复用性
可以把通用的转换逻辑封装成扩展方法,让 DataTable 直接调用。
例如:
public static class DataTableExtensions
{
public static List<T> ToList<T>(this DataTable dt) where T : new()
{
// 此处放入上面的反射逻辑
...
}
}
使用时只需:var users = dataTable.ToList<user>();</user>
代码更简洁,易于维护。
以上就是.NET怎么将DataTable转换为List对象_DataTable转List方法教程的详细内容,更多请关注其它相关文章!
# 遍历
# 餐馆网站推广
# 开封省心的网站建设
# 5号网关键词排名
# 宁都租房网站建设
# 北京建设工程律师网站
# 惠州与网站建设
# 怎样推广定制品市场营销
# 市辖区网站建设优化
# seo引流营销推广
# 通海县网站seo
# 较高
# 只需
# list
# 这是
# 实体类
# 有什么区别
# 更高
# 复用
# 适用于
# 转换为
# .net
# typedef
# 代码复用
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
msn官网入口地址手机版 msn官方网站手机最新链接
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法
LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置
一加 14R 快充无反应_一加 14R 充电优化
必由学在线入口 必由学网页版快速登录入口
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
Python类型检查:优化关联可选属性的Mypy推断策略
J*a里如何使用forEach遍历Map_Map遍历方法说明
Go语言中Map值调用指针接收器方法的限制与应对
马斯克:Optimus 人形机器人复数形式为 Optimi
《刺客信条:影》PS5 Pro和Switch 2画面对比
AO3访问入口汇总 AO3网页版同人作品一键直达
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
学习通在线学习平台 学习通网页版直接进入课程中心
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
Composer如何解决json扩展缺失的错误
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
顺丰快递查单号物流信息 顺丰快递小程序查询入口
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
DLsite中文平台入口 DLsite官网内容在线查看
必由学官方登录入口 必由学教师学生账号快速访问
C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
如何更改在 Excel 中打开超链接时的默认浏览器
qq游戏大厅官方下载_qq游戏免费下载安装入口
Go语言中JSON数据解码与字段访问指南
CSS实现侧边栏导航项全宽圆角悬停背景效果
天眼查企业查询官网入口 天眼查官方网页版查询
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
poki免费入口快捷访问 poki人气小游戏直接玩站点
CKEditor 5 自定义构建在React应用中渲染失败的调试与解决
漫蛙2漫画入口 漫蛙正版网页漫画直达网址
解决J*aScript中重复选择项的确认对话框显示问题
电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】
Lar*el Form Request中唯一性验证在更新操作中的正确实现
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
如何提高微信支付的安全性_微信支付安全防护与设置建议
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
Django模型中自动计算可用余额的实现方法
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
Python实时数据流中的动态最值查找策略
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
J*a实现学校排课程序_面向对象结构化项目示例
微博网页版首页入口 微博电脑端官网登录链接


2025-11-20
浏览次数:次
返回列表
eDefinition() == typeof(Nullable<>))
{
propType = Nullable.GetUnderlyingType(propType);
}
var convertedValue = Convert.ChangeType(value, propType);
property.SetValue(entity, convertedValue, null);
}
}
list.Add(entity);
}
return list;
}