使用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 { .... };
尝试这个
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>();