과제:
정렬을 보장하면서 열 정의와 행 개수가 다른 여러 DataTable을 병합 데이터 무결성을 보존하는 것은 도전적입니다.
해결책:
이 문제를 극복하고 하나의 포괄적인 DataTable을 생성하려면 다음 사용자 지정 방법을 사용할 수 있습니다.
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; }
사용법:
var tables = new[] { tblA, tblB, tblC }; DataTable TblUnion = tables.MergeAll("c1");
이 방법은 병합을 위한 강력한 솔루션을 제공합니다. DataTables, 데이터 정렬 처리 및 주요 데이터 보존.
위 내용은 구조가 서로 다른 여러 DataTable을 단일 테이블로 효율적으로 병합하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!