Dictionary<Type, ICanGenerateRule> Generators(IInstancesOf<ICanGenerateRule> ruleGenerators) { return ( from generator in ruleGenerators from type in generator.From select new {generator, type}) .ToDictionary(d => d.type, d => d.generator); }