Si PersistentAttributeInfo est uniquement connu au moment de l'exécution, il est évident que vous ne pouvez pas écrire le lambda de façon statique et que le compilateur doit effectuer la lourde tâche pour vous. Vous devrez créer un nouveau à partir de zéro:
Type persistentAttributeInfoType = [TypeYouKnowAtRuntime];
ParameterExpression parameter = Expression.Parameter(persistentAttributeInfoType, "info");
LambdaExpression lambda = Expression.Lambda(
typeof(Func<,>).MakeGenericType(persistentAttributeInfoType, typeof(bool)),
Expression.Equal(Expression.Property(parameter, "Owner"), Expression.Constant(null)),
parameter);
Vous pouvez appeler lambda.Compile() pour renvoyer un délégué qui est analogue à l'expression lambda transformé dans votre exemple (même si bien sûr typées).
Impressionnant travail ... J'ai joué avec lui pendant environ 20 minutes et a abandonné ... –