Beispiel #1
0
        protected override Expression VisitMember(MemberExpression expression)
        {
            var isIdentifier = _isEntityDecider.IsIdentifier(expression.Expression.Type, expression.Member.Name);

            if (isIdentifier)
            {
                _hasIdentifier = true;
            }
            if (!isIdentifier)
            {
                _memberExpressionDepth++;
            }

            var result = base.VisitMember(expression);

            if (!isIdentifier)
            {
                _memberExpressionDepth--;
            }

            if (_isEntityDecider.IsEntity(expression.Type) &&
                ((_requiresJoinForNonIdentifier && !_hasIdentifier) || _memberExpressionDepth > 0) &&
                _joiner.CanAddJoin(expression))
            {
                var key = ExpressionKeyVisitor.Visit(expression, null);
                return(_joiner.AddJoin(result, key));
            }

            _hasIdentifier = false;
            return(result);
        }
        protected override Expression VisitMemberExpression(MemberExpression expression)
        {
            if (_isEntityDecider.IsIdentifier(expression.Expression.Type, expression.Member.Name))
            {
                _hasIdentifier = true;
            }
            else if (_hasIdentifier)
            {
                _identifierMemberExpressionDepth++;
            }

            var result = base.VisitMemberExpression(expression);

            if (_hasIdentifier)
            {
                _identifierMemberExpressionDepth--;
            }

            if (_isEntityDecider.IsEntity(expression.Type) &&
                (!_hasIdentifier || _identifierMemberExpressionDepth > 0) &&
                _joiner.CanAddJoin(expression))
            {
                var key = ExpressionKeyVisitor.Visit(expression, null);
                return(_joiner.AddJoin(result, key));
            }

            _hasIdentifier = false;

            return(result);
        }
        protected override Expression VisitMemberExpression(MemberExpression expression)
        {
            var isIdentifier = _isEntityDecider.IsIdentifier(expression.Expression.Type, expression.Member.Name);

            if (!isIdentifier)
            {
                _memberExpressionDepth++;
            }

            var result = base.VisitMemberExpression(expression);

            if (!isIdentifier)
            {
                _memberExpressionDepth--;
            }

            if (_isEntityDecider.IsEntity(expression.Type) &&
                _memberExpressionDepth > 0 &&
                _joiner.CanAddJoin(expression))
            {
                var key = ExpressionKeyVisitor.Visit(expression, null);
                return(_joiner.AddJoin(result, key));
            }

            return(result);
        }
Beispiel #4
0
        protected override Expression VisitMember(MemberExpression expression)
        {
            // A static member expression such as DateTime.Now has a null Expression.
            if (expression.Expression == null)
            {
                // A static member call is never a join, and it is not an instance member access either.
                return(base.VisitMember(expression));
            }

            var isIdentifier = _isEntityDecider.IsIdentifier(expression.Expression.Type, expression.Member.Name);

            if (isIdentifier)
            {
                _hasIdentifier = true;
            }
            if (!isIdentifier)
            {
                _memberExpressionDepth++;
            }

            var result = base.VisitMember(expression);

            if (!isIdentifier)
            {
                _memberExpressionDepth--;
            }

            if (_isEntityDecider.IsEntity(expression.Type) &&
                ((_requiresJoinForNonIdentifier && !_hasIdentifier) || _memberExpressionDepth > 0) &&
                _joiner.CanAddJoin(expression))
            {
                var key = ExpressionKeyVisitor.Visit(expression, null);
                return(_joiner.AddJoin(result, key));
            }

            _hasIdentifier = false;
            return(result);
        }