La première question est de savoir comment déterminer les ensembles à rechercher. System.Reflection.Assembly fournit un certain nombre de méthodes pour répertorier certains types d'assemblages - par exemple GetReferencedAssemblies() trouvera des assemblys référencés par un assembly donné - utile si vous avez Assembly C (qui identifie B et A), mais pas si vous venez avoir l'Assemblée A (qui n'en fait aucun). Vous pouvez également scanner le disque, ou d'autres méthodes, selon vos besoins.
Une fois que vous avez déterminé comment itérer assemblées, utilisez la technique de cet article à trouver des classes qui dérivent de la classe en question: Discovering derived types using reflection
appliquer cette logique récursive jusqu'à la fin de l'arbre. L'intervenant sur votre question a raison - l'arbre peut avoir plusieurs branches. Je ne sais pas pourquoi vous voudriez utiliser Linq pour faire ceci - Linq ne semble pas construit pour ce type de question. Je n'ai personnellement trouvé aucun moyen de faire des opérations de récursion ou de file d'attente à l'intérieur de Linq. J'utiliserais juste C# ou VB déclarations simples pour cela plutôt que Linq.
Cette question n'est pas claire. Essayez-vous d'utiliser LINQ pour interroger les métadonnées de réflexion sur les classes 'Customer' ou l'utilisez-vous pour interroger une sorte de collection d'objets' Customer'? – LBushkin
Et si c'est un arbre qui s'embranche? – recursive
@LBushkin: Tout ce que je veux, c'est le type qui se trouve en bas de la chaîne d'héritage à partir d'une séquence d'assemblages. Un objet System.Type pour être précis. – Marcus