public IEnumerable <DogeSymbol> ResolveSymbolCandidates(IList <string> name, Predicate <DogeSymbol> symbolConditions, Predicate <DogeSymbolTableType> symbolTableTypeCondition) { var candidates = SymbolTables .Where(x => symbolTableTypeCondition(x.Value.SymbolTableType)) .SelectMany(x => x.Value.ResolveSymbolCandidates(name, symbolConditions, symbolTableTypeCondition)); if (symbolTableTypeCondition(SymbolTableType)) { candidates = candidates .Concat(Symbols .Select(x => x.Value) .Where(x => x.FullName.EndsWith(name) && symbolConditions(x))); } return(candidates); }