public QaRowCount( [Doc(nameof(DocStrings.QaRowCount_table))][NotNull] ITable table, [Doc(nameof(DocStrings.QaRowCount_referenceTables))][NotNull] IList <ITable> referenceTables, [Doc(nameof(DocStrings.QaRowCount_minimumValueOffset))][CanBeNull] string minimumValueOffset, [Doc(nameof(DocStrings.QaRowCount_maximumValueOffset))][CanBeNull] string maximumValueOffset) : base(Union(new[] { table }, referenceTables)) { Assert.ArgumentNotNull(table, nameof(table)); Assert.ArgumentNotNull(referenceTables, nameof(referenceTables)); _table = table; _referenceTables = new List <ITable>(referenceTables); CultureInfo formatProvider = CultureInfo.InvariantCulture; _minimumValueOffset = OffsetSpecification.Parse(minimumValueOffset, formatProvider); _maximumValueOffset = OffsetSpecification.Parse(maximumValueOffset, formatProvider); Assert.ArgumentCondition( _minimumValueOffset != null || _maximumValueOffset != null, "At least one offset must be specified"); }
private int ReportErrors(int rowCount, int referenceRowCount, [CanBeNull] OffsetSpecification minimumValueOffset, [CanBeNull] OffsetSpecification maximumValueOffset) { if (minimumValueOffset != null) { var minimumRowCount = (int)Math.Ceiling(minimumValueOffset.ApplyTo(referenceRowCount)); if (rowCount < minimumRowCount) { string description = string.Format( "Row count is less than minimum value: {0:N0} < {1:N0} (reference row count: {2:N0})", rowCount, minimumRowCount, referenceRowCount); return(ReportError(description, _table, Codes[Code.TooFewRows], null)); } } if (maximumValueOffset != null) { var maximumRowCount = (int)Math.Floor(maximumValueOffset.ApplyTo(referenceRowCount)); if (rowCount > maximumRowCount) { string description = string.Format( "Row count is greater than maximum value: {0:N0} > {1:N0} (reference row count: {2:N0})", rowCount, maximumRowCount, referenceRowCount); return(ReportError(description, _table, Codes[Code.TooManyRows], null)); } } return(NoError); }