Following this question I would like to know if the reuse of lambda parameter expression instances should be considered good or bad?
I sometimes get a complete LINQ
You need to consider your use case. How might these lambdas be combined in the future?
For example, are you going to want to combine two lambdas using an OR operation?
Expression> lambda1 = p => !p.IsDeleted;
Expression> lambda2 = p => p.DomainId == 1;
// How do I get (p => !p.IsDeleted || p.DomainId == 1)?
If so, it's easier to join them like this:
Expression.Lambda>(
Expression.OrElse(lambda1.Body, lambda2.Body),
lambda1.Parameters[0]);
The above code works just fine if they both have the same parameter expression object. If they don't, suddenly you have to traverse the entire tree of lambda2, creating a new expression tree that substitutes the parameter for the one that's in the first expression. It can be done, and I've written some utility methods to make it easy when I have to do stuff like this, but if you can identify that this is the type of use case you're going to run into you might as well make life simpler for yourself by using the same parameter in the first place.
On the other hand, if you're going to combine the lambdas in a way that the parameters need to play different roles in a larger lambda expression, as Eric pointed out, then you're going to need those parameters to be different.