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; }
Penggunaan:
var tables = new[] { tblA, tblB, tblC }; DataTable TblUnion = tables.MergeAll("c1");
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!