繁体   English   中英

如何在C#中明智地追加两个DataTable列

[英]How to append two DataTable column wise in C#

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

我想将T1T2合并到另一个DataTable T中 ,以使结果表T包含M + N列。

在C#中有什么简单的方法可以实现,我的意思是不使用Loop。

您可以使用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();

除循环外没有其他方法。 DataTables有一个合并功能,但是它正在按行进行操作,即使您可以根据需要指定添加列,也可以将其他列保留为空,并且会得到以下内容:

values values values null null 
null   null   null   values values

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

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

同样,我更喜欢循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM