public IEnumerable <string> FullTableNamesIndependantToDependant(Ranges ranges) { var result = new List <string>(); var fullTableNames = ranges.Select(item => item.FullTableName).ToList(); var fullTableNamesToInspect = ranges.Select(item => item.FullTableName).ToList(); do { var dependants = new List <string>(); foreach (var tableName in fullTableNamesToInspect) { var tableInfo = databaseInfo.TableInfos[tableName]; // Are there dependencies of tableName with other inspected tables? var tableDependencies = tableInfo.DependsOn.Intersect(fullTableNames, StringComparer.InvariantCultureIgnoreCase); // Remove tables that are already part of the result from the dependencies tableDependencies = tableDependencies.Where(item => !result.Contains(item, StringComparer.InvariantCultureIgnoreCase)).ToList(); if (tableDependencies.Any()) { dependants.Add(tableName); } else { result.Add(tableName); } } if (fullTableNamesToInspect.Count() == dependants.Count()) { throw new CyclicDependenciesException(dependants); } fullTableNamesToInspect = dependants; } while (fullTableNamesToInspect.Any()); return(result); }
public IEnumerable <string> FullTableNamesDependantToIndependant(Ranges ranges) { return(FullTableNamesIndependantToDependant(ranges).Reverse()); }