/// <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)); }