0

我有一个数据表列表。将它们组合到单个数据表中的最有效方法是什么?这些数据表中的每一个的架构都不同,并且这些表的行数可能会有所不同。

IE

  • 表 1 有 A、B 列

  • 表 2 有 C、D 列

  • 表 3 有 E、F 列

我的输出应该是一个包含所有上述列的结果表,并且应该包含所有行。

几行代码就可以实现吗?可以选择 LINQ 吗?

4

2 回答 2

1

用了Merge方法。请参阅http://msdn.microsoft.com/en-us/library/fk68ew7b.aspx


根据您的评论更新。如果每个表中只有两列,则无法Merge按预期使用该方法。

要执行您想要的操作,您需要在每个表上都有一个主键。当一行在表之间有一个共同的标识符时,列将被合并,而不是添加一行。例如,如果 RowId 1 在 Table1 和 Table 2 中,您将得到 RowId 1;A、B、C、D、空、空。如果 RowId 2 仅在 Table1 中,那么您将获得 RowId2;A,B,空,空,空,空。

http://msdn.microsoft.com/en-us/library/system.data.missingschemaaction.aspx

用户可以在每个 DataTable 上显式设置主键约束。这可确保与现有记录匹配的传入记录被更新而不是追加。

于 2012-04-05T05:53:13.763 回答
0

解决我上面的问题:

                DataColumn[] keys = new DataColumn[1];

                DT.Columns.Add(primaryColumn, typeof(System.Int32));
                for (int i = 0; i < DT.Rows.Count; i++)
                {
                    DT.Rows[i][primaryColumn] = i;
                }
                keys[0] = DT.Columns[primaryColumn];
                mapDT.PrimaryKey = keys;

                tables.Add(DT); 

    private static DataTable MergeDataTables(List<DataTable> tables, string keyColumn)
    {
        DataTable mergedTable = new DataTable();

        foreach (DataTable dt in tables)
            mergedTable.Merge(dt);

        mergedTable.PrimaryKey = null;

        mergedTable.Columns.Remove(keyColumn);

        return mergedTable;
    }

希望有帮助。

于 2012-04-05T19:05:50.213 回答