C#如何将DataTable高效转成List<Dictionary<string, object>>

C# 如何将DataTable 高效转成List<Dictionary<string, object>>?

Dictionary<string, object>代表一行,string是字段名,object是字段值

不直接使用foreach,封装一个转换的类

使用AsEnumerable封装的静态扩展方法,如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text.Json;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            DoWork();
        }

        static void DoWork()
        {
            var dt = new DataTable();
            dt.Columns.Add("RowId");
            dt.Columns.Add("FirstName");
            dt.Columns.Add("LastName");
            dt.Columns.Add("Quality");
            dt.Rows.Add(1, "Tom", "Hilton", "ABC");
            dt.Rows.Add(1, "Tom", "Hilton", "ABC");
            dt.Rows.Add(3, "Test3", "Sample3", "AWR");
            dt.Rows.Add(4, "Test4", "Sample4", "XYZ");
            dt.Rows.Add(5, "Test5", "Sample5", "BCA");

            var list = dt.ConvertToList();
            Console.WriteLine(JsonSerializer.Serialize(list));
        }
    }

    public static class DataTableExtension
    {
        public static List<Dictionary<string, string>> ConvertToList(this DataTable dataTable)
        {
            return dataTable.AsEnumerable().Select(
                row => dataTable.Columns.Cast<DataColumn>().ToDictionary(
                    column => column.ColumnName, // 键
                    column => row[column] as string // 值
                )
            ).ToList();
        }
    }
}

运行结果如下:

 

我是Rector,码友网的创建者,码友网--一个.NET/.NET Core开发的编程社区。关注码友网,解锁更多.NET&C#开发技巧。

没什么高效的方法吧,都得遍历行嵌套遍历列

AsEnumerable后用linq可以简化代码,效率感觉还不如直接foreach