Aganstrong 2021-04-26 10:32 采纳率: 56%
浏览 597
已采纳

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • i__0o0__ 2021-04-26 10:36
    关注

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

    评论
  • Go 旅城通票 2021-04-26 11:27
    关注

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

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥15 Stata数据分析请教
  • ¥15 请教如何为VS2022搭建 Debug|win32的openCV环境?
  • ¥15 关于#c++#的问题:c++如何使用websocketpp实现websocket接口调用,求示例代码和相关资料