Créer une expression lambda avec un nouveau type anonyme au moment de l'exécution

Je veux appeler une méthode qui attend un paramètre comme ceci:

Expression<Func<sometype, 'a>> expr

J'ai besoin pour la construction de ce paramètre lors de l'exécution, parce que je ne sais pas quel est le type anonyme va ressembler avant; il pourrait avoir n'importe quel nombre de champs:

x => new { a=x.a, b=x.b, c=x.c, etc... }

Je peux créer un type à l'exécution qui a la même "signature" (Est-ce le bon mot?) que l'anonyme de type, mais la question est: Comment dois-je construire cette expression lambda au moment de l'exécution? Plus Particulièrement L'Expression.La nouvelle est m'énerve, parce que j'ai besoin de passer un constructorInfo à ce que je l'obtenir à partir d'un type (qui peut en effet être un type anonyme, mais je ne peux pas créer un type anonyme au moment de l'exécution. Ou est-il un moyen de le faire?).

Mise à jour (contexte, comme demandé dans les commentaires)

La méthode que je veux invoquer est:

DependentNavigationPropertyConfiguration.HasForeignKey<TKey>(Expression<Func<TDependentEntityType, TKey>> foreignKeyExpression)

La raison pour laquelle je veux faire, c'est de faire automatiquement une propriété de navigation à une entité qui hérite d'une certaine classe de base comprennent la clé de cette classe de base dans la clé étrangère. Parce qu'une entité peut avoir plusieurs champs de clé de tout type, le type TKey n'est connu que de moi au moment de l'exécution.

Qu'est-ce que l'entrée de scénario vous? Avez-vous le construire au moment de l'exécution de la chaîne-de la base de données?
Lors de l'exécution d'un certain nombre de champs sont sélectionnés à partir de 'sometype'. J'ai besoin de construire l'expression. Les noms des champs de la anonyme de type sont les mêmes que les champs qui ont été sélectionnés à partir de 'sometype'.
Pourquoi le downvote? Veuillez expliquer afin que je puisse apprendre un jour.

OriginalL'auteur EPLKleijntjens | 2013-05-30