protected override Expression VisitSubQuery(SubQueryExpression subQueryExpression) { var navigationRewritingExpressionVisitor = new NavigationRewritingExpressionVisitor(_queryModelVisitor, _entityQueryProvider); navigationRewritingExpressionVisitor.Rewrite(subQueryExpression.QueryModel); return(subQueryExpression); }
protected override Expression VisitNew(NewExpression newExpression) { Check.NotNull(newExpression, nameof(newExpression)); if (newExpression.Members != null && newExpression.Arguments.Any() && newExpression.Arguments.Count == newExpression.Members.Count) { var memberBindings = newExpression.Arguments .Select(Visit) .Where(e => e != null) .ToArray(); if (memberBindings.Length == newExpression.Arguments.Count) { return(Expression.Constant(memberBindings)); } } else if (NavigationRewritingExpressionVisitor.IsCompositeKey(newExpression.Type)) { var propertyCallExpressions = ((NewArrayExpression)newExpression.Arguments.Single()).Expressions; var memberBindings = propertyCallExpressions .Select(Visit) .Where(e => e != null) .ToArray(); if (memberBindings.Length == propertyCallExpressions.Count) { return(Expression.Constant(memberBindings)); } } return(null); }