I think that is not possible, at lest I see that very complex. You see, a predicate can be very simple or very complex (expressions, expression into another, DBFunctionCalls, etc). So you can't just change the involved entity of a predicate.
In my opinion, this should be managed outside, I mean, the programmer should know that he can't pass a predicate that doesn't match some entity type.