如何将多个表合并为一个?
我有3个列名为Test 1, Test 2 and Test3
Datatables获得了3行值。
我希望他们在一个数据表中,如下面的例子
TEST 1 | TEST2 | TEST 3
我已经尝试了合并函数dt1.merge(dt2)
,但它为每列添加了额外的3行。
该表适用于DataGridView
。
这是关于我如何从数据库中检索表的代码示例。
string queryStatusTest =
"SELECT status AS 'uppgift " + t +"' FROM b_personuppgift
WHERE uppgiftid IN(SELECT uppgiftid FROM b_uppgift
WHERE kursid = 'ABC123') "
+ "AND uppgiftid=" + t + " ORDER BY uppgiftid";
DataTable dTest = dataBase.Select(queryStatusTest);
database.Select()
函数只返回一个表。
答案 0 :(得分:0)
我想说数据库是指表。您可以使用以下语句将所有3个表中的数据插入到一个表中:
INSERT INTO table_all(column1,column2,column3)
VALUES(
(SELECT column1 FROM test1),
(SELECT column1 FROM test2),
(SELECT column1 FROM test3),
)
答案 1 :(得分:0)
此问题的最常见原因是您尚未在DataTables上设置主键。 Merge方法使用主键来匹配行。
MSDN中的Merge method documentation声明:
将新的源DataTable合并到目标中时,任何源行 DataRowState值为Unchanged,Modified或Deleted的是 匹配具有相同主键值的目标行。源行 DataRowState值为Added与新目标行匹配 与新源行相同的主键值。
答案 2 :(得分:0)
假设3列类型为字符串:
var mergeTable = dt1.AsEnumerable()
.Concat(dt2.AsEnumerable())
.Concat(dt3.AsEnumerable())
.GroupBy(row => new {
Test1 = row.Field<string>("Test1")
Test2 = row.Field<string>("Test2")
Test3 = row.Field<string>("Test3")
})
.Select(g => g.First())
.CopyToDataTable();