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