m0_59894124 2021-12-20 16:32 采纳率: 67.4%
浏览 89

C#比较两个datatable的差异

有两个datatable,dt1中有姓名,学号,dt2中只有name,除了遍历怎样将dt1中姓名这一列存在但是dt2中usename没有的数据保存到一个新的datatable中

  • 写回答

2条回答 默认 最新

  • 码老头 2021-12-20 16:51
    关注

    除了遍历DataTable的每行数据外,还可以使用LINQ将DataTable转换成字典集合,之前我回答过类似的问题,请参考:

    以下是本问题的一种实现方案,供教参:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text.Json;
    
    namespace ConsoleApp2
    {
        public class MyProgram
        {
            static void Main(string[] args)
            {
                DoWork();
                Console.ReadKey();
            }
    
            static void DoWork()
            {
                var dt1 = new DataTable();
                dt1.Columns.Add("No");
                dt1.Columns.Add("Name");
                dt1.Rows.Add(1, "Tom1");
                dt1.Rows.Add(2, "Tom2");
                dt1.Rows.Add(3, "Tom3");
                var list1 = dt1.ConvertToList();
                Console.WriteLine("table 1中的数据...");
                Console.WriteLine(JsonSerializer.Serialize(list1));
    
                var dt2 = new DataTable();
                dt2.Columns.Add("Name");
                dt2.Rows.Add("Tom1");
                dt2.Rows.Add("Tom3");
                var list2 = dt2.ConvertToList();
                Console.WriteLine("table 2中的数据...");
                Console.WriteLine(JsonSerializer.Serialize(list2));
    
                var result = list1.Where(x => !list2.Any(a => a["Name"] == x["Name"]));
                Console.WriteLine("对比后的数据...");
                Console.WriteLine(JsonSerializer.Serialize(result));
            }
    
        }
    
        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();
            }
        }
    }
    

    运行结果:

    table 1中的数据...
    [{"No":"1","Name":"Tom1"},{"No":"2","Name":"Tom2"},{"No":"3","Name":"Tom3"}]
    table 2中的数据...
    [{"Name":"Tom1"},{"Name":"Tom3"}]
    对比后的数据...
    [{"No":"2","Name":"Tom2"}]
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月20日

悬赏问题

  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋
  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办
  • ¥15 python用ARIMA时间预测模型预测数据出错,急!
  • ¥30 为什么后端传给前端vue的河流json数据不在地图中显示出来
  • ¥50 关于弹性波动方程求解的问题:
  • ¥100 C# 做 10个串口数据采集;采集数据填到 EXE表中;1路与PLC MODBUS通讯 ;要求速度尽量快点; 有能做完整程序的单聊,重酬
  • ¥15 P0口接8个LED,编写程序,并绘制proteus仿真电路原理图