private IEnumerable <CompareDocumentResult> _Compare(IEnumerable <TwoDocuments> twoBsonDocumentsList) { foreach (TwoDocuments twoBsonDocuments in twoBsonDocumentsList) { CompareDocumentResult result = CompareBsonDocuments(twoBsonDocuments); //bool equal = result.Equal; //if ((!equal && _returnNotEqualDocuments) || (equal && _returnEqualDocuments)) yield return(result); } }
private CompareDocumentResult CompareBsonDocuments(TwoDocuments twoBsonDocuments) { BsonDocument document1 = twoBsonDocuments.Document1; BsonDocument document2 = twoBsonDocuments.Document2; CompareDocumentResult result = new CompareDocumentResult(twoBsonDocuments, _comparatorOptions); result.DontSetDocumentReference = _dontSetDocumentReference; result.DocumentReferenceElements1 = _documentReferenceElements1; result.DocumentReferenceElements2 = _documentReferenceElements2; if (document1 == null && document2 == null) { result.DocumentsType = DocumentsType.Document1AndDocument2AreNull; } else if (document1 == null) { result.DocumentsType = DocumentsType.Document1IsNull; } else if (document2 == null) { result.DocumentsType = DocumentsType.Document2IsNull; } else { result.DocumentsType = DocumentsType.Document1AndDocument2AreNotNull; foreach (var twoDocElement in EnumerateTwoBsonDocumentsElements(document1, document2)) { CompareElementResult compareElements; if (twoDocElement.Value1 != null && twoDocElement.Value2 != null) { //if (twoDocElement.Value1.IsString && twoDocElement.Value2.IsString) //{ // if (_stringComparisonIgnoreWhiteSpace) // { // } //} //if (_stringComparisonIgnoreCase && twoDocElement.Value1.IsString && twoDocElement.Value2.IsString) //{ // if (string.Equals(twoDocElement.Value1.AsString, twoDocElement.Value2.AsString, StringComparison.InvariantCultureIgnoreCase)) // compareElements = CompareElementResult.Equal; // else // compareElements = CompareElementResult.NotEqual; //} //else if (twoDocElement.Value1 == twoDocElement.Value2) // compareElements = CompareElementResult.Equal; //else // compareElements = CompareElementResult.NotEqual; if (Equals(twoDocElement.Value1, twoDocElement.Value2)) { compareElements = CompareElementResult.Equal; } else { compareElements = CompareElementResult.NotEqual; } } else if (twoDocElement.Value1 != null) { compareElements = CompareElementResult.OnlyValue1; } else // if (twoDocElement.Value2 != null) { compareElements = CompareElementResult.OnlyValue2; } result.AddElement(twoDocElement.Name, compareElements, twoDocElement.Value1, twoDocElement.Value2); } } return(result); }
public void AddResult(CompareDocumentResult result, bool keepResult) { _nbDocumentsCompared++; if (result.Equal) { _nbDocumentsEqual++; } else { _nbDocumentsNotEqual++; } switch (result.DocumentsType) { case DocumentsType.Document1AndDocument2AreNotNull: _nbDocument1AndDocument2NotNull++; break; case DocumentsType.Document1AndDocument2AreNull: _nbDocument1AndDocument2Null++; break; case DocumentsType.Document1IsNull: _nbDocument1Null++; break; case DocumentsType.Document2IsNull: _nbDocument2Null++; break; } foreach (ElementResult element in result.Elements) { ElementResultAggregate elementAggregate; if (_elementsAggregate.ContainsKey(element.Name)) { elementAggregate = _elementsAggregate[element.Name]; } else { elementAggregate = new ElementResultAggregate(); elementAggregate.Name = element.Name; _elementsAggregate.Add(element.Name, elementAggregate); } elementAggregate.NbValues++; if (element.CompareResult == CompareElementResult.Equal) { elementAggregate.NbValuesEqual++; } else if (element.CompareResult == CompareElementResult.NotEqual) { elementAggregate.NbValuesNotEqual++; } else if (element.CompareResult == CompareElementResult.OnlyValue1) { elementAggregate.NbNoValue2++; } else if (element.CompareResult == CompareElementResult.OnlyValue2) { elementAggregate.NbNoValue1++; } } if (keepResult) { _compareDocumentResults.Add(result); } }