https://blog.csdn.net/a11112244444/article/details/78921200

https://www.cnblogs.com/chongde/articles/5992040.html

/// <summary>
        /// 实体类转换成DataTable
        /// </summary>
        /// <param name="modelList">实体类列表</param>
        /// <returns></returns>
        public DataTable FillDataTable(List<T> modelList)
        {
            if (modelList == null || modelList.Count == 0)
            {
                return null;
            }
            DataTable dt = CreateData(modelList[0]);
 
 
            foreach (T model in modelList)
            {
                DataRow dataRow = dt.NewRow();
                foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
                {
                    dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
                }
                dt.Rows.Add(dataRow);
            }
            return dt;
        }
 
 
        /// <summary>
        /// 根据实体类得到表结构
        /// </summary>
        /// <param name="model">实体类</param>
        /// <returns></returns>
        private DataTable CreateData(T model)
        {
            DataTable dataTable = new DataTable(typeof(T).Name);
            foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
            {
                dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
            }
            return dataTable;
        }
————————————————
版权声明:本文为CSDN博主「张伟光」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a11112244444/article/details/78921200

 // 当字段类型是Nullable<>时
41 Type colType = pi.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
42 {
43
44 colType = colType.GetGenericArguments()[0];
45
46 }
47
48 dtReturn.Columns.Add(new DataColumn(pi.Name, colType));

自己测试:
  DataTable dataTable = new DataTable(typeof(OperationModel.ReturnSubsidiary.Business.OrderDetailByMainOrderInfo).Name);
            foreach (System.Reflection.PropertyInfo propertyInfo in typeof(OperationModel.ReturnSubsidiary.Business.OrderDetailByMainOrderInfo).GetProperties())
            {
                DataColumn dc = new DataColumn();
                dc.ColumnName = propertyInfo.Name;
                // 当字段类型是Nullable<>时
                Type colType = propertyInfo.PropertyType;
                if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                {

                    colType = colType.GetGenericArguments()[0];

                }
                
                dc.DataType = colType;
                dataTable.Columns.Add(dc);
            }
            DataRow dataRow = dataTable.NewRow();
            foreach (System.Reflection.PropertyInfo propertyInfo in typeof(OperationModel.ReturnSubsidiary.Business.OrderDetailByMainOrderInfo).GetProperties())
            {
                try
                {
                    dataRow[propertyInfo.Name] = propertyInfo.GetValue(a, null);
                }
                catch
                {
                    dataRow[propertyInfo.Name] = DBNull.Value;
                }
                
            }
            dataTable.Rows.Add(dataRow);

List:

 DataTable dataTable = new DataTable(typeof(OperationModel.ReturnSubsidiary.Business.OrderDetailByMainOrderInfo).Name);
          
            foreach (System.Reflection.PropertyInfo propertyInfo in typeof(OperationModel.ReturnSubsidiary.Business.OrderDetailByMainOrderInfo).GetProperties())
            {
                Type colType = propertyInfo.PropertyType;
                if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                {

                    colType = colType.GetGenericArguments()[0];

                }
                dataTable.Columns.Add(new DataColumn(propertyInfo.Name, colType));
            }

            foreach (OperationModel.ReturnSubsidiary.Business.OrderDetailByMainOrderInfo model in modelList)
            {
                DataRow dataRow = dataTable.NewRow();
                foreach (System.Reflection.PropertyInfo propertyInfo in typeof(OperationModel.ReturnSubsidiary.Business.OrderDetailByMainOrderInfo).GetProperties())
                {
                    try
                    {
                        dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
                    }
                    catch
                    {
                        dataRow[propertyInfo.Name] = DBNull.Value;
                    }
                 
                }
                dataTable.Rows.Add(dataRow);
            }


C# Model对象转DataTable的更多相关文章

  1. DataTable和DataRow利用反射直接转换为Model对象的扩展方法类

    DataTable和DataRow利用反射直接转换为Model对象的扩展方法类   /// <summary> /// 类 说 明:给DataTable和DataRow扩展方法,直接转换为 ...

  2. DataTable转List,DataTable转为Model对象帮助类

    DataTable转List,DataTable转为Model对象帮助类 public class ModelConvertHelper<T> where T : new() { publ ...

  3. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  4. 【Java EE 学习 69 上】【struts2】【paramsPrepareParamsStack拦截器栈解决model对象和属性赋值冲突问题】

    昨天有同学问我问题,他告诉我他的Action中的一个属性明明提供了get/set方法,但是在方法中却获取不到表单中传递过来的值.代码如下(简化后的代码) public class UserAction ...

  5. model对象之setter方法使用,解决去除空格和将数字转成字符串展示方法

    1.系统中手机号注册的时候,不能含有前后空格.在model对象中过滤~! private String mobile; public String getMobile() { return mobil ...

  6. django的model对象转化成dict

    今天发现一个掉渣天的方法,Django的forms包里面有一个方法:model_to_dict(),它可以将一个model对象转化成dict. In [1]: from apps.dormitory. ...

  7. Json转model对象,model转json,解析json字符串

    GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...

  8. ASP.NET的MVC中Model对象字段的数…

    ASP.NET的MVC中Model对象字段的常用数据说明属性: Required——该字段不允许为空. MaxLength——设置数组或字符串最大长度. StringLength——设置字符串最小和最 ...

  9. 将Model对象转换成json文本或者json二进制文件

    将Model对象转换成json文本或者json二进制文件 https://github.com/casatwy/AnyJson 注意:经过测试,不能够直接处理字典或者数组 主要源码的注释 AJTran ...

  10. 超简易复制Model对象(为后续备忘录设计模式博文做铺垫)

    超简易复制Model对象(为后续备忘录设计模式博文做铺垫) 复制整个Model需要实现NSCopy协议,可以想象是非常麻烦的一件事情,今天我跟大家分享一个不需要你做任何操作的复制Model对象的方法, ...

随机推荐

  1. Rocketmq 如何处理消息积压 ?

    一.消息积压发现 1.Console入口 A.延迟数量(Delay) 消息积压数量,即当前Topic还剩下多少消息未处理,该值越大,表示积压的消息越多 B.最后消费时间(LastConsumeTime ...

  2. 根据返回值,判断是否执行下一步的方法(Run Keyword And Return Status指令的使用)

    场景分析: 上图"通用模版测试"内容 满足,如果当前页面存在这条数据,即结束执行本条用例,自动执行下一条.如果没有,则调用新建模版关键字,执行新建模版. 脚本如下 1配置运费模版 ...

  3. Traefik,想说爱你不容易:一场动态反向代理的心累之旅

    前言:技术选型的初心 在微服务盛行.容器部署逐渐常态化的今天,"动态反向代理"显得尤为重要. Traefik 凭借其原生支持 Docker.自动生成路由.集成 Let's Encr ...

  4. Java编程--简单的Proxy程序(代理设计模式)

    有时候对象要完成某项任务(功能)需要很多步骤,而这些步骤全部交给对象自己完成显然是不现实的,就像我们人要吃饭,你总不能要求我们每个人都去种地.打面.做饭一样,我们只需要完成其中的吃饭这一核心操作就可以 ...

  5. 【记录】OJ|区间DP|石子合并(环形)

    1. 题干 描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出一个算法,计算出将N堆石子 ...

  6. 王炸!SpringBoot+MCP 让你的系统秒变AI小助手

    王炸!SpringBoot+MCP 让你的系统秒变AI小助手 感觉本篇对你有帮助可以关注一下我的微信公众号(深入浅出谈java),会不定期更新知识和面试资料.技巧!!! 一.MCP 是什么? MCP( ...

  7. VS Code + Cline + 魔搭MCP Server 实现抓取网页内容。

    MCP的诞生,可以说是为AI带来一波新的活力. ‌MCP(Model Context Protocol)‌是由Anthropic公司在2024年11月推出的一种开放标准协议,旨在为大型语言模型(LLM ...

  8. 干货分享:Dify中4种核心变量详解!

    在 Dify 工作流(Workflow 和 Chatflow)的实现中,"变量"做为最基础.最核心的组件发挥着不可或缺的作用,因为它承载了不同节点间数据传递的作用. 也就是说,我们 ...

  9. 痞子衡嵌入式:i.MXRT10xx系列ROM的UART SDP设置不同波特率的方法与实践

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT10xx系列ROM的UART SDP设置不同波特率的方法. 恩智浦 i.MXRT 四位数系列目前分为 RT10xx 和 RT ...

  10. HarmonyOS NEXT从图库选择资源上传到服务器或者把网络资源下载到图库

    用户需要分享文件.保存图片.视频等用户文件时,开发者可以通过系统预置的文件选择器(FilePicker),实现该能力.通过Picker访问相关文件,将拉起对应的应用,引导用户完成界面操作,接口本身无需 ...