Expression.Or, el parámetro 'item' no está dentro del alcance

Estoy tratando de escribir una función estática en O dos expresiones, pero recibo el siguiente error:

El parámetro 'elemento' no está dentro del alcance.

Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.InvalidOperationException: el parámetro 'elemento' no está dentro del alcance.

el método:

public static Expression<Func<T, bool>> OrExpressions(Expression<Func<T, bool>> left, Expression<Func<T, bool>> right)
{
    // Define the parameter to use
    var param = Expression.Parameter(typeof(T), "item");

    var filterExpression = Expression.Lambda<Func<T, bool>>
         (Expression.Or(
             left.Body,
             right.Body
          ), param);
    // Build the expression and return it
    return (filterExpression);
}

editar: agregar más información

Las expresiones siendo o'd provienen del método a continuación, que se ejecuta muy bien. si hay una mejor manera o los resultados, soy todo oídos. Además, no sé cuántos están siendo o quisieran por adelantado.

public static Expression<Func<T, bool>> FilterExpression(string filterBy, object Value, FilterBinaryExpression binaryExpression)
{
    // Define the parameter to use
    var param = Expression.Parameter(typeof(T), "item");

    // Filter expression on the value
    switch (binaryExpression)
    {
        case FilterBinaryExpression.Equal:
            {
                // Build an expression for "Is the parameter equal to the value" by employing reflection
                var filterExpression = Expression.Lambda<Func<T, bool>>
                    (Expression.Equal(
                        Expression.Convert(Expression.Property(param, filterBy), typeof(TVal)),
                        Expression.Constant(Value)
                     ),
                    param);
                // Build the expression and return it
                return (filterExpression);
            }

editar: agregando aún más información

Alternativamente, ¿hay una mejor manera de hacer un o? Actualmente .Where (restricción) funciona bien donde la restricción es de tipo Expresión>. ¿Cómo puedo hacer where (restricción1 o restricción2) (a la restricción n ')

¡Gracias por adelantado!

Respuestas a la pregunta(5)

Su respuesta a la pregunta