1

如何将多个表合并为一个?

我有 3 个带有列名的数据表:Test 1, Test 2 and Test3

数据表有 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()函数只返回一个表。

4

3 回答 3

0

我猜那个说数据库你的意思是table。您可以使用以下语句将所有 3 个表中的数据插入到一个表中:

INSERT INTO table_all(column1,column2,column3) 
VALUES( 
  (SELECT column1 FROM test1),
  (SELECT column1 FROM test2),
  (SELECT column1 FROM test3),
)
于 2012-09-25T10:51:05.697 回答
0

此问题的最常见原因是您尚未在 DataTables 上设置主键。Merge 方法使用主键来匹配行。

MSDN 中的Merge 方法文档指出:

将新的源 DataTable 合并到目标中时,任何 DataRowState 值为 Unchanged、Modified 或 Deleted 的源行都会与具有相同主键值的目标行匹配。DataRowState 值为已添加的源行与具有与新源行相同的主键值的新目标行匹配。

于 2012-09-25T11:13:22.147 回答
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();
于 2012-09-25T11:16:18.293 回答