C# ListToDataTable

复制代码
        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);

结果:

 

posted @   Hi.wz  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示