使用LINQ,C#将两个DataTable合并为一个DataTable

本文关键字:DataTable 合并 一个 LINQ 两个 使用 | 更新日期: 2023-09-27 18:19:54

使用C#.NET;的ASP.NET。NET3.5

我有两个数据表如下:

数据表1

Location   Visa_Q1     Visa_Q2
Blore      25          40
Hyd        40          60

数据表2

Location   Visa_Q3     Visa_Q4
Blore      50          35
Hyd        80          90

如何使用LINQ(不循环每行)组合两个数据表以获得如下DataTable的输出:

组合数据表

Location   Visa_Q1     Visa_Q2   Visa_Q3    Visa_Q4
Blore      25          40        50         35
Hyd        40          60        80         90

编辑

只需根据匹配的"Location"将两个表连接起来,我就可以得到组合形式的结果数据。我不想手动将每个列字段选择为select new { .... };

使用LINQ,C#将两个DataTable合并为一个DataTable

尝试这个

var results = from table1 in dt1.AsEnumerable()
              join table2 in dt2.AsEnumerable() on table1["Location"] equals table2["Location"]
              select new
                  {
                      Location = table1["Location"],
                      Visa_Q1 = (int)table1["Visa_Q1"],
                      Visa_Q2 = (int)table1["Visa_Q2"],
                      Visa_Q3 = (int)table2["Visa_Q3"],
                      Visa_Q4 = (int)table2["Visa_Q4"],
                  };

编辑

尝试这个选择所有列

 DataTable table = new DataTable();
        foreach (DataColumn column in t1.Columns)
        {
            table.Columns.Add(column.ColumnName, column.DataType);
        }
        foreach (DataColumn column in t2.Columns)
        {
            if (column.ColumnName == "Location")
                table.Columns.Add(column.ColumnName + "2", column.DataType);
            else
                table.Columns.Add(column.ColumnName, column.DataType);
        }
        var results = t1.AsEnumerable().Join(t2.AsEnumerable(),
                a => a.Field<String>("Location"),
                b => b.Field<String>("Location"),
                (a, b) =>
                {
                    DataRow row = table.NewRow();
                    row.ItemArray = a.ItemArray.Concat(b.ItemArray).ToArray();
                    table.Rows.Add(row);
                    return row;
                });

我相信你可以这样做:

IEnumerable<DataRow> res = 
    from d1 in DataTable1.AsEnumerable()
    join d2 in DataTable2.AsEnumerable() on d1["Location"] equals d2["Location"]
    select new DataRow
    {
        d1["Location"],
        d1["Visa_Q1"],
        d1["Visa_Q2"],
        d2["Visa_Q3"],
        d2["Visa_Q4"]
    };
DataTable CombinedDataTable = res.CopyToDataTable<DataRow>();