首页 > 解决方案 > 如何合并两个同名但区分大小写的数据表?

问题描述

我从两个来源获取动态数据。列名相同,但大小写不同。在合并数据表时,它会创建重复的列。无论大小写如何,我都想与相同的列合并。

代码:

dataTable1.merge(dataTable2);

我在 dataTable1 中的列名是:

Title
filePath

我在 dataTable2 中的列名是:

title
FilePath

它应该认为这两列是相同的。

我的代码:

    public void TestOnMergeDataTables()
    {
        DataTable dt = new DataTable("Order");
        DataColumn dc = dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add("Name", typeof(String));

        dt.Rows.Add(1, "pramod");
        dt.Rows.Add(2, "ravi");
        dt.Rows.Add(3, "deepak");
        dt.Rows.Add(4, "kiran");
        dt.Rows.Add(5, "madhu");

        DataTable dt2 = new DataTable("Order");
        DataColumn dc2 = dt2.Columns.Add("ID", typeof(int));
        dt2.Columns.Add("name", typeof(String));
        dt2.Columns.Add("Type", typeof(String));

        dt2.Rows.Add(6, "ashu", "Gen");
        dt2.Rows.Add(7, "rudra", "Gen");
        dt2.Rows.Add(8, "kavita", "Gen");
        dt2.Rows.Add(9, "suman", "Gen");
        dt2.Rows.Add(10, "lakshman", "Gen");

        dt.Merge(dt2,true);
    }

结果: 程序的输出

它应该将 Name , name 列视为同一列

标签: c#datatable

解决方案


一个简单的方法是使用 linq。(这不会删除列中存在的重复项)。要删除重复项,您必须使用 GroupBy。

var mergedTable = dataTable1.AsEnumerable()
                 .Select(row => new { Key = dataRow["Title"], Row = dataRow })
                 .Union(dataTable1.AsEnumerable()
                 .Select(row => new { Key = dataRow["title"], Row = dataRow }))
                 .CopyToDataTable();  

推荐阅读