【问题标题】:How to append two DataTable column wise in C#如何在 C# 中明智地追加两个 DataTable 列
【发布时间】:2016-01-15 12:10:34
【问题描述】:

我有一个带有 M 列的 DataTable T1 和另一个带有 N 列的 DataTable T2并且它们的行数相同。

我想将 T1 和 T2 组合成另一个 DataTable T 以便生成的表格 T包含 M+N 个列。

在 C# 中是否有任何简单的方法,我的意思是不使用循环。

【问题讨论】:

  • 所以从 5 行变为 6 行,因为 T2 包含更多列还是?
  • 两个表的行数相同,但列数可能相同,也可能不同。我只想按列组合两个表。结果表将具有与 T1(或 T2)相同的行数。
  • 希望对您有所帮助:stackoverflow.com/questions/2379747/…
  • 如果您的表具有相同的行数但不共享列名,您将如何决定 T1 中的哪一行与 T2 中的一行合并?这有关系吗?

标签: c# asp.net datatable


【解决方案1】:

您可以使用 LINQ 外连接查询并从两个表中获取数据到最终表。下面是一个示例代码

       //First DataTable
        DataTable dt = new DataTable();
        DataColumn dc = new DataColumn("ID");
        DataColumn dc1 = new DataColumn("Name");

        dt.Columns.AddRange(new DataColumn[] {dc, dc1 });

        DataRow dr = dt.NewRow();
        dr[dc] = "1";
        dr[dc1] = "Test";
        dt.Rows.Add(dr);

        //Second DataTable
        DataTable dt1 = new DataTable();
        DataColumn dc2 = new DataColumn("ID");
        DataColumn dc3 = new DataColumn("City");

        dt1.Columns.AddRange(new DataColumn[] { dc2, dc3 });

        DataRow dr1 = dt1.NewRow();
        dr1[dc2] = "1";
        dr1[dc3] = "Belgium";
        dt1.Rows.Add(dr1);


        //Rasult DataTable
        DataTable result = new DataTable();
        DataColumn col1 = new DataColumn("ID");
        DataColumn col2 = new DataColumn("Name");
        DataColumn col3 = new DataColumn("City");
        result.Columns.AddRange(new DataColumn[] { col1, col2, col3 });


        // Join both table data
        var data = from row1 in dt.AsEnumerable()
                   join row2 in dt1.AsEnumerable()
                   on row1.Field<string>("ID") equals row2.Field<string>("ID") into test
                   from rw in test.DefaultIfEmpty()
                   select result.LoadDataRow(new object[]
                    {
                         row1.Field<string>("ID"),
                         row1.Field<string>("Name"),
                         rw == null ? "No City" : rw.Field<string>("City")
                    }, false);

        data.CopyToDataTable();

【讨论】:

  • 很好的答案拉胡尔。但是结果数据表列的创建是静态的。
  • @Saikat,否则没有其他方法可以获取两个 DT 的组合模式
【解决方案2】:

除了循环之外别无他法。 DataTables 有一个合并功能,但它是按行执行操作,即使您可以指定在需要时添加列,但它会将其他列保留为空,您将得到如下结果:

values values values null null 
null   null   null   values values

使用这种方法,您可以循环遍历所有行,并在步骤 2 中将两行合并为一个新 DataTable 中的一行,但为此您需要一个 DataTable 来存储结果。

如果您知道行数相同,则可以将列添加到列数较少的表中,然后将它们复制过去。

同样,我更喜欢循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2017-11-03
    • 2013-07-11
    • 2022-01-11
    • 2021-02-10
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多