C#/.Net把复杂Dictionary转换为DataTable

List转DataTabel和DataTable转List之前都写过,但是最近遇到了一个奇怪的需求,我使用了Dictionary来存储数据,然后又需要把Dictionary转成DataTable来给目标赋值,百度转了一圈没找到相关的内容,然后就自己写了一个,CV工程师竟然开始手写方法了,哈哈哈。

实现思路:

1.获取Dictionary中最大的子集行数

2.按字典Key添加列头

3.按最大子集行数添加空白行

4.填充数据即可

核心代码:


        /// <summary>
        /// Dictionary转DataTable
        /// </summary>
        /// <param name="dict">字典</param>
        /// <returns></returns>
        public static DataTable DictToDataTable(Dictionary<string, List<LibraryExcel>> dict)
        {
            //获取MAX数据集行数
            var maxCount = dict.Values.OrderByDescending(t => t.Count).FirstOrDefault().Count;

            DataTable dt = new DataTable();

            //动态添加列
            foreach (var colName in dict.Keys)
            {
                dt.Columns.Add(colName, typeof(string));
            }

            //创建空白行
            for (int i = 0; i < maxCount; i++)
            {
                DataRow dr = dt.NewRow();
                dt.Rows.Add(dr);
            }

            //填充数据
            foreach (KeyValuePair<string, List<LibraryExcel>> item in dict)
            {
                int thiscount = 0;
                foreach (LibraryExcel libraryExcel in item.Value)
                {
                    dt.Rows[thiscount][item.Key] = libraryExcel.RackCode;
                    thiscount++;
                }
            }

            return dt;
        }

数据效果(不确定的Content列数量,根据最大的子集生成行,然后挨个单元格填充数据):

 

THE END