コード例 #1
0
        protected override Expression VisitSubQuery(SubQueryExpression subQueryExpression)
        {
            var navigationRewritingExpressionVisitor
                = new NavigationRewritingExpressionVisitor(_queryModelVisitor, _entityQueryProvider);

            navigationRewritingExpressionVisitor.Rewrite(subQueryExpression.QueryModel);

            return(subQueryExpression);
        }
コード例 #2
0
        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);
        }