C# 将DataTable反射成实体类(高效)

2024-09-06 07:20

本文主要是介绍C# 将DataTable反射成实体类(高效),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

工具类实现(直接复制粘贴) 

    public class DataTableModelConvertHelper{public static List<T> ConvertList<T>(DataTable table) where T : class{List<ResultArgs<string, string, Type, System.Reflection.PropertyInfo>> lstArgses = new List<ResultArgs<string, string, Type, System.Reflection.PropertyInfo>>();var props = typeof(T).GetProperties();foreach (var cln in props)//获取实体类的属性及属性类型{lstArgses.Add(new ResultArgs<string, string, Type, System.Reflection.PropertyInfo>(){Value1 = string.Empty,//Table.ColName 数据表列名Value2 = cln.Name,//Entity.Name 实体类属性名Value3 = cln.PropertyType,//Entity.Type 实体类属性类型Value4 = cln});}foreach (DataColumn cln in table.Columns)//获取数据表DataTable的列名{foreach (var resultArgse in lstArgses){if (resultArgse.Value2.ToLower() == cln.ColumnName.ToLower())//都转换为小写做匹配{resultArgse.Value1 = cln.ColumnName;}}}List<T> lst = new List<T>();foreach (DataRow row in table.Rows){var info = Activator.CreateInstance<T>();foreach (var ocn in lstArgses){if (!string.IsNullOrEmpty(ocn.Value1)){try{//Console.WriteLine("ocn.Value1:{0};ocn.Value2:{1}", ocn.Value1, ocn.Value2);if (ocn.Value4 != null && row[ocn.Value1] != DBNull.Value){var objValue = DataTableModelConvertHelper.ChangeType(row[ocn.Value1], ocn.Value3);//Console.WriteLine("objValue:{0}", objValue);ocn.Value4.SetValue(info, objValue, null);}}catch (Exception ex){Console.WriteLine(ex.ThrowExceptionDetail());}}}lst.Add(info);}return lst;}#region = ChangeType =private static object ChangeType(object obj, Type conversionType){return ChangeType(obj, conversionType, Thread.CurrentThread.CurrentCulture);}private static object ChangeType(object obj, Type conversionType, IFormatProvider provider){#region NullableType nullableType = Nullable.GetUnderlyingType(conversionType);if (nullableType != null){if (obj == null){return null;}return Convert.ChangeType(obj, nullableType, provider);}#endregionif (typeof(System.Enum).IsAssignableFrom(conversionType)){return Enum.Parse(conversionType, obj.ToString());}return Convert.ChangeType(obj, conversionType, provider);}#endregion}public class ResultArgs<T, G>{public T Value1 { set; get; }public G Value2 { set; get; }}public class ResultArgs<T, G, H>{public T Value1 { set; get; }public G Value2 { set; get; }public H Value3 { set; get; }}public class ResultArgs<T, G, H, J>{public T Value1 { set; get; }public G Value2 { set; get; }public H Value3 { set; get; }public J Value4 { set; get; }}

 调用方式

//RequestInfo是实体类
//table是Datatable
//将DataTable表格数据转换为Model实体类代码
var lst = DataTableModelConvertHelper.ConvertList<RequestInfo>(table);

这篇关于C# 将DataTable反射成实体类(高效)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141372

相关文章

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进