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
Freigeben: 2025-01-01 12:20:10
Original
270 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

Verwendung:

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

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage