internal static void CompareInCurrentDirectory() { List<Database> databases = LoadDatabasesInCurrentDirectory(); // Find which tables are common to all databases: Set<ObjectName> allTables = new Set<ObjectName>(); Set<ObjectName> commonTables = new Set<ObjectName>(); if (databases.Count > 0) commonTables.UnionUpdate(databases[0].TablesByName.Keys); foreach (Database database in databases) { Set<ObjectName> tablesInThisDatabase = new Set<ObjectName>(database.TablesByName.Keys); allTables.UnionUpdate(tablesInThisDatabase); commonTables.IntersectionUpdate(tablesInThisDatabase); } Set<ObjectName> nonCommonTables = Set<ObjectName>.Difference(allTables, commonTables); Console.WriteLine(nonCommonTables); // Find which columns are common to all databases: foreach (ObjectName commonTableName in commonTables) { Set<string> allColumns = new Set<string>(); Set<string> commonColumns = new Set<string>(); if (databases.Count > 0) { Set<string> columns = new Set<string>(databases[0].TablesByName[commonTableName].Columns.Keys); commonColumns.UnionUpdate(columns.Map<string>(NormaliseColumnName)); } foreach (Database database in databases) { Set<string> columnsInThisTable = new Set<string>(database.TablesByName[commonTableName].Columns.Keys).Map<string>(NormaliseColumnName); commonColumns.IntersectionUpdate(columnsInThisTable); allColumns.UnionUpdate(columnsInThisTable); } Set<string> nonCommonColumns = Set<string>.Difference(allColumns, commonColumns); if (nonCommonColumns.Count > 0) { Console.WriteLine(commonTableName.Name); Console.WriteLine(nonCommonColumns); } } }