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

相关文章

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET