在C#中将两个数据表合并为一个

时间:2018-12-27 13:14:49

标签: c#

我有两个数据表,第一个有No Of Specification列,第二个有NoOfSpec列,但是我想在单列下合并为No Of Specification

数据表#1

No Of Specification       
--------------------      
1                            
2                            
3                            

数据表2

NoOfSpec
---------------------
4
5
6

结果应该是

No Of Specification
----------------------
1
2
3
4
5
6

注意:两个表中都有多列

2 个答案:

答案 0 :(得分:1)

这是您可以使用Linq连接数据的一种方法。提取两个表中数据行的Union,并为每个对象创建一个匿名对象,在其中为合并设置密钥-在您的情况下,第一个表的No of Specification和{ {1}}从第二个开始。然后,我们对该联合使用NoOfSpec来获取合并的唯一值。最后,我们从联合中选择每个唯一键的第一个匹配项,然后复制到新的GroupBy

DataTable

输出:

DataTable firstTable = new DataTable();
firstTable.Columns.Add("No of Specification", typeof(int));
firstTable.Columns.Add("OtherCol", typeof(string));
firstTable.Rows.Add(1, "A");
firstTable.Rows.Add(2, "B");
firstTable.Rows.Add(3, "C");

DataTable secondTable = new DataTable();
secondTable.Columns.Add("NoOfSpec", typeof(int));
secondTable.Columns.Add("OtherCol", typeof(string));
secondTable.Rows.Add(3, "F");
secondTable.Rows.Add(4, "G");
secondTable.Rows.Add(5, "H");

var mergedTable = firstTable.AsEnumerable().Select(dataRow => new { Key = dataRow["No of Specification"], Row = dataRow })
    .Union(secondTable.AsEnumerable().Select(dataRow => new { Key = dataRow["NoOfSpec"], Row = dataRow }))
    .GroupBy(a => a.Key, a => a.Row)
    .Select(a => a.First())
    .CopyToDataTable();  

答案 1 :(得分:0)

SQL正在执行。我假设其他列相同。我给的另一列名为[value],在两个表中都存在。如果要合并更多列,则必须一一添加它们,因为两个不同名称的列正在合并。

SELECT L.[No Of Specification] as [No Of Specification], L.[value]
FROM [Data Table 1] L
UNION --if you know there can not be duplicates
SELECT R.[NoOfSpec], R.[value]
FROM [Data Table 2] R
ORDER BY [No Of Specification]