private static Type GetImplementation <T>(ExpressMetaData metadata) { var implementations = metadata.TypesImplementing(typeof(T)).ToList(); var ids = new HashSet <short>(implementations.Select(i => i.TypeId)); var root = implementations.AsQueryable() .FirstOrDefault(i => !ids.Contains(i.SuperType.TypeId)); return(root.Type); }