Aganstrong 2021-04-26 10:32 采纳率: 57.4%
浏览 641
已采纳

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

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

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

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

  • 写回答

3条回答 默认 最新

  • 码老头 2021-04-30 22:46
    关注

    使用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#开发技巧。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?