public DataComparer(DataComparerConfig config, ISorter sorter, IRowComparerFactory rowComparerFactory, IKeyMapperFactory keyMapperFactory, IValueMapperFactory valueMapperFactory) { _sorter = sorter; _rowComparerFactory = rowComparerFactory; _keyMapperFactory = keyMapperFactory; _valueMapperFactory = valueMapperFactory; Config = config; _stopwatch = new Stopwatch(); }
public IKeyMapper Create(DataComparerConfig config, DataTable left, DataTable right) { var mapper = new KeyColumnMapper(); var leftCols = left.Columns.Cast <DataColumn>().ToDictionary(x => x.ColumnName); var rightCols = right.Columns.Cast <DataColumn>().ToDictionary(x => x.ColumnName); foreach (var key in config.Keys) { if (!leftCols.TryGetValue(key, out var leftCol)) { continue; } if (!rightCols.TryGetValue(key, out var rightCol)) { continue; } mapper.Add(leftCol, rightCol); } if (mapper.LeftColumns.Count > 0) { return(mapper); } // TODO: 5-Improve DataTables do not contain any specified keys warning message. Log.Warn($"Warning: Collections do not contain any key. Using first matching column."); foreach (DataColumn leftCol in left.Columns) { if (!rightCols.TryGetValue(leftCol.ColumnName, out var rightCol)) { continue; } mapper.Add(leftCol, rightCol); break; } if (mapper.LeftColumns.Count == 0) { // TODO: 5-Improve no matching Key Columns message exception throw new InvalidOperationException("Could not find any mathcing Columns"); } return(mapper); }
public IColumnMapper Create(DataComparerConfig config, IKeyMapper keyMap, DataTable left, DataTable right) { var mapper = new ColumnMapper(); var leftCols = left.Columns.Cast <DataColumn>().ToDictionary(x => x.ColumnName); var rightCols = right.Columns.Cast <DataColumn>().ToDictionary(x => x.ColumnName); foreach (DataColumn leftCol in left.Columns) { var name = leftCol.ColumnName; if (config.Keys.Contains(name)) { continue; } if (config.Skip.Contains(name)) { continue; } if (!rightCols.TryGetValue(name, out var rightCol)) { continue; } mapper.Add(leftCol, rightCol); break; } if (mapper.LeftColumns.Count == 0) { // TODO: 5-Improve no matching Value Columns message exception throw new InvalidOperationException("Could not find any mathcing Value Columns"); } return(mapper); }