/// <summary>
        /// Логический оператор "ИЛИ" для объединения двух выражений фильтрации.
        /// </summary>
        /// <param name="left">Выражение слева.</param>
        /// <param name="right">Выражение справа.</param>
        /// <typeparam name="T">Тип фильтруемых объектов.</typeparam>
        /// <returns>Цепочка из двух фильтров с логическим "ИЛИ" между ними.</returns>
        public static Expression <Func <T, bool> > Or <T>(this Expression <Func <T, bool> > left, Expression <Func <T, bool> > right)
        {
            ParameterExpression leftParameter = left.Parameters[0];

            SubstitutionExpressionVisitor visitor = new SubstitutionExpressionVisitor();

            visitor.AddExpression(right.Parameters[0], leftParameter);

            Expression body = Expression.OrElse(left.Body, visitor.Visit(right.Body));

            return(Expression.Lambda <Func <T, bool> >(body, leftParameter));
        }