Heim >Backend-Entwicklung >C++ >Wie kann ich mehrere Datentabellen mit unterschiedlichen Strukturen effizient in einer einzigen Tabelle zusammenführen?

Wie kann ich mehrere Datentabellen mit unterschiedlichen Strukturen effizient in einer einzigen Tabelle zusammenführen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-01 12:20:10306Durchsuche

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

Mehrere Datentabellen zu einer einzigen umfassenden Tabelle kombinieren

Herausforderung:
Mehrere Datentabellen mit unterschiedlichen Spaltendefinitionen und Zeilenanzahlen zusammenführen und dabei die Ausrichtung sicherstellen und die Wahrung der Datenintegrität kann sein herausfordernd.

Lösung:
Um dieses Problem zu lösen und eine einzige umfassende Datentabelle zu erstellen, können Sie die folgende benutzerdefinierte Methode anwenden:

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;
}

Verwendung:

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

Diese Methode bietet eine robuste Lösung zum Zusammenführen von DataTables, zur Handhabung der Datenausrichtung, und die Erhaltung wichtiger Daten.

Das obige ist der detaillierte Inhalt vonWie kann ich mehrere Datentabellen mit unterschiedlichen Strukturen effizient in einer einzigen Tabelle zusammenführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn