protected override Expression VisitBinary(BinaryExpression node)
        {
            var ignoreAtStart = _ignore;

            _ignore = _ignore || node.NodeType == ExpressionType.OrElse;

            if (!_ignore)
            {
                var leftParams  = ParameterExtractor.ExtractParameters(node.Left);
                var rightParams = ParameterExtractor.ExtractParameters(node.Right);

                if ((
                        (!_isNot && node.NodeType == ExpressionType.Equal) ||
                        (_isNot && node.NodeType == ExpressionType.NotEqual)
                        ) && AreParametersCorrect(leftParams, rightParams))
                {
                    AddKeysToList(node, leftParams, rightParams);
                    _expression = _expression == null ? node : Expression.AndAlso(_expression, node);
                }
            }

            var returnVal = base.VisitBinary(node);

            if (!ignoreAtStart && _ignore)
            {
                _ignore = false;
            }

            return(returnVal);
        }
Exemple #2
0
        public static HashSet <ParameterExpression> ExtractParameters(Expression expr)
        {
            var l = new ParameterExtractor();

            l.Visit(expr);

            return(l._parameters);
        }