Uso de dinámicas o expresiones en C #

Utilizo el filtro dinámico en mi programa como la siguiente solución:

public static IQueryable<T> MyFilter<T>(this IQueryable<T> queryable) where T : class ,IModel
{
        var someIds = new int[]{1,2,3,4,5};
        var userId = 2;

        Expression<Func<T, bool>> predicate1 = e => someIds.Contains(e.Id);
        Expression<Func<T, bool>> predicate2 = e => e.UserId==userId;
        Expression<Func<T, bool>> predicate3 = e => e.CreatedDate != null;

        var pred1 = Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(predicate1, predicate2));
        var pred2 = Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(pred1, predicate3));


        var result = queryable
            .Where(pred2);

        return result;
    }

losIModel es así:

Public interface IModel{
   int Id { get; set; }
   int UserId { get; set; }
   DateTime? CreatedDate { get; set; }
}

pero me sale este error:

El operador binario O no está definido para los tipos System.Func2[AnyClass,System.Boolean]' and 'System.Func2 [AnyClass, System.Boolean] '.

en esta linea:

var pred1 = Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(predicate1, predicate2));

¿Como puedó resolver esté problema?

de antemano apreciamos cualquier ayuda

Respuestas a la pregunta(3)

Su respuesta a la pregunta