using System; using System.Collections.Generic; using System.Text; namespace sharpcomparer { public class ProcedureComparison : Comparison { public string Name { get { return LeftItem != null ? LeftItem.RoutineName : RightItem.RoutineName; } } public string Owner { get { return LeftItem != null ? LeftItem.RoutineSchema : RightItem.RoutineSchema; } } public string Type { get { return LeftItem != null ? LeftItem.RoutineType : RightItem.RoutineType; } } public ProcedureComparison(Procedure leftItem, Procedure rightItem, Comparison.ComparisonDifference difference) : base(leftItem, rightItem, difference) { } public static List Compare(List left, List right) { List comparison = new List(); foreach (Procedure item in left) { Procedure result = right.Find( delegate(Procedure find) { return find.RoutineName == item.RoutineName; } ); if (result != null) { if (item != result) { comparison.Add(new ProcedureComparison(item, result, ComparisonDifference.Different)); } else { comparison.Add(new ProcedureComparison(item, result, ComparisonDifference.None)); } } else { comparison.Add(new ProcedureComparison(item, null, ComparisonDifference.LeftOnly)); } } foreach (Procedure item in right) { Procedure result = left.Find( delegate(Procedure find) { return find.RoutineName == item.RoutineName; } ); if (result == null) { comparison.Add(new ProcedureComparison(null, item, ComparisonDifference.RightOnly)); } } return comparison; } } }