Aganstrong
2021-04-26 10:32
采纳率: 34.5%
浏览 175

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

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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • lampo 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

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

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

    点赞 评论

相关推荐 更多相似问题