首页 > 编程语言 >C# ListToDataTable

C# ListToDataTable

时间:2024-10-12 15:49:25浏览次数:1  
标签:objValue Name C# List ListToDataTable new dt property

        public static DataTable ListToDataTable<T>(List<T> list)
        {
            DataTable dt = new DataTable();

            // 获取实体类型
            Type type = typeof(T);

            // 添加列
            PropertyInfo[] properties = type.GetProperties();
            foreach (PropertyInfo property in properties)
            {
                dt.Columns.Add(property.Name, property.PropertyType.IsGenericType
                    ? typeof(string)
                    : property.PropertyType);
            }

            if (list == null || list.Count == 0)
            {
                return dt;
            }

            // 添加行数据
            foreach (T item in list)
            {
                DataRow row = dt.NewRow();
                foreach (PropertyInfo property in properties)
                {
                    object objValue = property.GetValue(item);
                    if (objValue == null)
                    {
                        row[property.Name] = DBNull.Value;
                    }
                    else
                    {
                        row[property.Name] = property.PropertyType.IsGenericType//类型是否是泛型类型
                            ? JsonConvert.SerializeObject(objValue)
                            : objValue;
                    }
                }
                dt.Rows.Add(row);
            }
            return dt;
        }

 调用:

List<Student> students = new List<Student>();
students.Add(new Student() { Id = 1, Name = "张三", StuClass = new List<StuClass>() { new StuClass(1, "语文", "") } });
students.Add(new Student() { Id = 2, Name = "张佳", StuClass = new List<StuClass>() { new StuClass(1, "数学", "") } });
var dt = Helper.ListToDataTable(students);

结果:

 

标签:objValue,Name,C#,List,ListToDataTable,new,dt,property
From: https://www.cnblogs.com/wz122889488/p/18460697

相关文章

  • 基于FIFO使用UART实现FPGA板与PC通信
    基于FIFO使用UART实现FPGA板与PC通信1.UART简介UART(通用异步收发传输器)是一种常用的串行通信协议,广泛用于FPGA与外部设备(如PC、传感器等)之间的通信。UART通信的核心是将并行数据转换为串行数据传输,然后在接收端再将串行数据恢复为并行数据。UART协议特点:异步通信:无需时钟......
  • 软件构造,生成算式采用CSV、XML、JSON三种形式进行存储并读取。
    编写代码完成将生成的算式及习题长期保存下来,采用CSV、XML、JSON三种形式进行存储并读取。提交相关代码及运行截图。importrandomimportcsvimportjsonimportxml.etree.ElementTreeasETfromxml.domimportminidom#生成随机算式数据defgenerate_exercises(count......
  • docker入门(二)之容器命令及私有仓库的部署(本地和harbor)
    容器命令:1.启动容器接下来演示在docker下运行一个ubuntu系统,从中学习各容器命令。--name="容器新名字"为容器指定一个名称(不指定的话会随机分配一个名字)。-d:后台运行容器并返回容器ID,也就启动守护式容器(后台运行)-i:以交互模式运行容器,通常与-t同时使用-t:为......
  • P9466 [EGOI2023] Bikes vs Cars / 骑车与汽车
    题意给定\(B,C\)两个矩阵,你需要构造一张两权图\(G=(V,E=\{(u,v,w_1,w_2)\})\)使得从\(i\)到\(j\)之间:可以只经过\(w_1\geB_{i,j}\)的边连通可以只经过\(w_2\geC_{i,j}\)的边连通不能只经过\(w_1>B_{i,j}\)的边连通不能只经过\(w_2>C_{i,j}\)的边连通构......
  • Ubuntu中Conda建立环境和删除环境
    网上说的很全面了,这里我把我遇到的一些问题和解决方案罗列出来,以便未来的学习和了解。博客的好处就体现出来了,下次你再用这个东西,就直接打开你的博客照抄就行了,不用东搜西搜了,及其方便,这种碎片化的东西,比记在笔记本或者而备忘要省事儿的多。。。创建环境condacreate-nxxxxxx......
  • Python cachetools常用缓存算法汇总
    文章目录cachetools介绍缓存操作设置数据生存时间(TTL)自定义缓存策略缓存装饰器缓存清理cachetools超过缓存数量maxsizecachetools使用示例cachetools介绍cachetools:是一个Python第三方库,提供了多种缓存算法的实现。缓存是一种用于临时存储计算结果的技术,以......
  • c# 中 中文、英文、数字、空格、标点符号占的字符大小
    在C#中,中文、英文、数字、空格和标点符号在不同编码下所占的字节大小是不一样的。常见的编码有UTF-8、UTF-16、GB2312等。以下是在不同编码下各种字符类型所占的字节大小:UTF-8:中文字符:3个字节英文字符:1个字节数字:1个字节空格:1个字节标点符号:1个字节或者更多UTF-16:中文字符......
  • Arch Linux ARM相关
    ArchLinuxARM软件源编辑 /etc/pacman.d/mirrorlist,在文件的最顶端添加Server=https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo搜索包:pacman-Ss关键字:在仓库中搜索含关键字的包。pacman-Qs关键字:搜索已安装的包。pacman-Qi包名:查看有关包的详尽信息。p......
  • Codeforces Round 946 (Div. 3)
    E.MoneyBuysHappiness题意:给你\(m\)个月,每个月可以赚\(x\)元,每个月你都有一次机会花费\(c_i\)元,获得\(h_i\)的幸福。(当然你目前得有足够的钱)。求出能够获得的最大幸福值。思路:我们可以求出获得\(i\)幸福值所需的最小花费,然后判断能否有足够的钱即可。考虑如何求解,把......
  • 创建的对象与class 对象的区别,两者之间的关系
    什么是class对象Class对象保存每个类型运行时的类型信息,如类名、属性、方法、父类信息等等。在JVM中,一个类只对应一个Class对象可以将java中的class对象看成一个模具,我们new出来的对象,则是通过模具按压出来的具体模型,模型里面的各种颜色各不相同(对象内的成员)class对象的特......