0

データテーブルのリストがあります。それらを単一のデータテーブルにまとめる最も効率的な方法は何ですか? これらの各データ テーブルのスキーマは異なり、これらのテーブルの行数は異なる場合があります。

すなわち

  • Table1 には列 A、B があります

  • Table2 には列 C、D があります

  • Table3 には列 E、F があります

私の出力は、上記のすべての列を含む結果テーブルであり、すべての行が含まれている必要があります。

数行のコードで達成できますか? LINQ はオプションでしょうか?

4

2 に答える 2

1

Mergeメソッドを使用しました。http://msdn.microsoft.com/en-us/library/fk68ew7b.aspxを参照してください。


あなたのコメントに基づいて更新します。各テーブルに 2 つの列しかない場合、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 に答える