コード例 #1
0
 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();
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }