Y también entre varias expresiones <Func <T, bool >>: referenciadas desde el alcance

Tengo 3 predicados, me gustaría hacer unAndAlso Entre. Encontré varias muestras en el tablero, pero no puedo resolver mi problema.

Estos predicados son:Expression<Func<T, bool>>

Tengo este codigo

Expression<Func<T, bool>> predicate1 = ......;
Expression<Func<T, bool>> predicate2 = ......;
Expression<Func<T, bool>> predicate3 = ......;

Creo un método de extensión para hacer un "Y también":

public static Expression<Func<T, bool>> AndAlso<T>(
    this Expression<Func<T, bool>> expr, 
    Expression<Func<T, bool>> exprAdd)
{
    var param = Expression.Parameter(typeof(T), "p");
    var predicateBody = Expression.AndAlso(expr.Body, exprAdd.Body);
    return Expression.Lambda<Func<T, bool>>(predicateBody, param);

    //Tried this too
    //var body = Expression.AndAlso(expr.Body, exprAdd.Body);
    //return Expression.Lambda<Func<T, bool>>(body, expr.Parameters[0]);
}

Yo uso así:

var finalPredicate = predicate1
    .AndAlso<MyClass>(predicate2)
    .AndAlso<MyClass>(predicate3);

El predicado mira esto:

Cuando uso en una consulta:

var res =  myListAsQueryable().Where(finalPredicate).ToList<MyClass>();

Me sale este error:variable 'p' de tipo 'BuilderPredicate.MyClass' referenciada desde el alcance '', pero no está definida

¿Podrías decirme que está mal?

Muchas gracias,