Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggabungkan Berbilang Jadual Data dengan Cekap dengan Struktur Berbeza ke dalam Jadual Tunggal?

Bagaimanakah Saya Boleh Menggabungkan Berbilang Jadual Data dengan Cekap dengan Struktur Berbeza ke dalam Jadual Tunggal?

Patricia Arquette
Lepaskan: 2025-01-01 12:20:10
asal
268 orang telah melayarinya

How Can I Efficiently Merge Multiple DataTables with Different Structures into a Single Table?

Menggabungkan Berbilang Jadual Data ke dalam Jadual Komprehensif Tunggal

Cabaran:
Menggabungkan berbilang Jadual Data dengan takrifan lajur dan kiraan baris yang berbeza sambil memastikan penjajaran dan memelihara integriti data boleh mencabar.

Penyelesaian:
Untuk mengatasi isu ini dan mencipta satu Jadual Data komprehensif, anda boleh menggunakan kaedah tersuai berikut:

public static DataTable MergeAll(this IList<DataTable> tables, String primaryKeyColumn)
{
    // Validate arguments
    if (!tables.Any())
        throw new ArgumentException("Tables must not be empty", "tables");
    if (primaryKeyColumn != null)
        foreach (DataTable t in tables)
            if (!t.Columns.Contains(primaryKeyColumn))
                throw new ArgumentException("All tables must have the specified primarykey column " + primaryKeyColumn, "primaryKeyColumn");

    DataTable table = new DataTable("TblUnion");

    // Disable data validation during bulk loading
    table.BeginLoadData();

    // Merge all tables into the result table
    foreach (DataTable t in tables)
        table.Merge(t, false, MissingSchemaAction.Add);

    // End data validation
    table.EndLoadData();

    // Handle duplicate primary keys (if specified)
    if (primaryKeyColumn != null)
    {
        // Group rows by primary key column
        var pkGroups = table.AsEnumerable().GroupBy(r => r[primaryKeyColumn]);

        // Identify groups with duplicate keys
        var dupGroups = pkGroups.Where(g => g.Count() > 1);

        // Combine data from duplicate rows into the first row of each group
        foreach (var grpDup in dupGroups)
        {
            // Use the first row and modify it to include data from other rows
            DataRow firstRow = grpDup.First();
            foreach (DataColumn c in table.Columns)
            {
                if (firstRow.IsNull(c))
                {
                    // Find the first non-null row for the current column and copy its value
                    DataRow firstNotNullRow = grpDup.Skip(1).FirstOrDefault(r => !r.IsNull(c));
                    if (firstNotNullRow != null)
                        firstRow[c] = firstNotNullRow[c];
                }
            }

            // Remove duplicate rows
            var rowsToRemove = grpDup.Skip(1);
            foreach (DataRow rowToRemove in rowsToRemove)
                table.Rows.Remove(rowToRemove);
        }
    }

    // Return the merged table
    return table;
}
Salin selepas log masuk

Penggunaan:

var tables = new[] { tblA, tblB, tblC };
DataTable TblUnion = tables.MergeAll("c1");
Salin selepas log masuk

Kaedah ini menyediakan penyelesaian yang mantap untuk penggabungan Jadual Data, mengendalikan penjajaran data dan memelihara data utama.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Berbilang Jadual Data dengan Cekap dengan Struktur Berbeza ke dalam Jadual Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan