如何在C#

时间:2016-01-15 12:10:34

标签: c# asp.net datatable

我有一个DataTable T1 M 列,另一个DataTable T2 N < / strong>列,它们的行数相同。

我想将 T1 T2 合并到另一个DataTable T 中,以便生成的表 T 包含 M + N 列数。

在C#中有没有简单的方法,我的意思是不使用Loop。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

除了循环之外没有任何办法。 DataTables有一个合并函数,但它正在按行进行操作,即使你认为可以指定在需要时添加列,它会将其他列保留为null,你会得到这样的结果:

values values values null null 
null   null   null   values values

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

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

同样,我更喜欢循环。