protected override MemberAssignment VisitMemberAssignment(MemberAssignment memberAssignment)
        {
            var        expression = memberAssignment.Expression;
            Expression?visitedExpression;

            if (_clientEval)
            {
                visitedExpression = Visit(memberAssignment.Expression);
            }
            else
            {
                var projectionMember = _projectionMembers.Peek().Append(memberAssignment.Member);
                _projectionMembers.Push(projectionMember);

                visitedExpression = Visit(memberAssignment.Expression);
                if (visitedExpression == QueryCompilationContext.NotTranslatedExpression)
                {
                    return(memberAssignment.Update(Expression.Convert(visitedExpression, memberAssignment.Expression.Type)));
                }

                _projectionMembers.Pop();
            }

            visitedExpression = MatchTypes(visitedExpression, expression.Type);

            return(memberAssignment.Update(visitedExpression));
        }
        /// <summary>
        ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
        ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
        ///     any release. You should only use it directly in your code with extreme caution and knowing that
        ///     doing so can result in application failures when updating to a new Entity Framework Core release.
        /// </summary>
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment memberAssignment)
        {
            var        expression = memberAssignment.Expression;
            Expression visitedExpression;

            if (_clientEval)
            {
                visitedExpression = Visit(memberAssignment.Expression);
            }
            else
            {
                var projectionMember = _projectionMembers.Peek().Append(memberAssignment.Member);
                _projectionMembers.Push(projectionMember);

                visitedExpression = Visit(memberAssignment.Expression);
                if (visitedExpression == null)
                {
                    return(null);
                }

                _projectionMembers.Pop();
            }

            visitedExpression = MatchTypes(visitedExpression, expression.Type);

            return(memberAssignment.Update(visitedExpression));
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
        ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
        ///     any release. You should only use it directly in your code with extreme caution and knowing that
        ///     doing so can result in application failures when updating to a new Entity Framework Core release.
        /// </summary>
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment memberAssignment)
        {
            var expression = MatchExpressionType(
                Visit(memberAssignment.Expression),
                memberAssignment.Expression.Type);

            return(memberAssignment.Update(expression));
        }
        protected override MemberBinding VisitMemberAssignment(MemberAssignment memberAssignment)
        {
#if WINDOWS_PHONE || PORTABLE
            return(Expression.Bind(memberAssignment.Member, VisitExpression(memberAssignment.Expression)));
#else
            return(memberAssignment.Update(VisitExpression(memberAssignment.Expression)));
#endif
        }
Ejemplo n.º 5
0
 protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
 {
     if (node.Member.Name == _propName)
     {
         return(node.Update(_newExpr));
     }
     return(base.VisitMemberAssignment(node));
 }
Ejemplo n.º 6
0
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
        {
            sb.Append(node.Member.Name);
            sb.Append("=");
            var ex = this.Visit(node.Expression);

            sb.Append(",");
            return(node.Update(ex));
        }
Ejemplo n.º 7
0
        private static MemberAssignment ConvertToMaterialisation(
            MemberAssignment assignment,
            IQueryProjectionModifier modifier)
        {
            var materialisedNestedProjection = GetMaterialisedNestedProjection(assignment.Expression);
            var modifiedProjection           = modifier.Modify(materialisedNestedProjection);

            return(assignment.Update(modifiedProjection));
        }
Ejemplo n.º 8
0
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment assignment)
        {
            var saveMember = this.currentMember;

            currentMember = assignment.Member;
            Expression e = this.Visit(assignment.Expression);

            currentMember = saveMember;
            return(assignment.Update(e));
        }
Ejemplo n.º 9
0
        internal static MemberAssignment VisitMember(MemberAssignment m, ExpressionVisitor visitor)
        {
            var exp = visitor.Visit(m.Expression);

            if (Object.ReferenceEquals(exp, m.Expression))
            {
                return(m);
            }

            return(m.Update(exp));
        }
Ejemplo n.º 10
0
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
        {
            var newExpression = Visit(node.Expression);
            var changed       = newExpression != node.Expression;

            if (changed)
            {
                return(node.Update(newExpression));
            }
            return(node);
        }
Ejemplo n.º 11
0
 protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
 {
     if (IsQueryEntityMember(node.Expression))
     {
         var expression = BookmarkAndVisit(node.Expression).AddCast(node.Expression.Type);
         return(Expression.Bind(node.Member, expression));
     }
     else
     {
         return(node.Update(BookmarkAndVisit(node.Expression)));
     }
 }
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment memberAssignment)
        {
            if (_clientEval)
            {
                return(memberAssignment.Update(Visit(memberAssignment.Expression)));
            }

            var projectionMember = _projectionMembers.Peek().Append(memberAssignment.Member);

            _projectionMembers.Push(projectionMember);

            var visitedExpression = Visit(memberAssignment.Expression);

            if (visitedExpression == null)
            {
                return(null);
            }

            _projectionMembers.Pop();
            return(memberAssignment.Update(visitedExpression));
        }
Ejemplo n.º 13
0
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
        {
            _usedMembers.Add(node.Member);

            if (!_keepMembers.Contains(node.Member))
            {
                var type = node.Member.GetPropertyOrFieldType();

                return(node.Update(Expression.Constant(GetDefaultValue(type), type)));
            }

            return(base.VisitMemberAssignment(node));
        }
        /// <inheritdoc/>
        /// <summary>
        /// When assigning values to a property with a custom serializer, such as in a select projection,
        /// convert them to the custom format in N1QL so they can be correctly deserialized.
        /// </summary>
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
        {
            var converter = _converterProvider.GetSerializationConverter(node.Member);

            if (converter != null)
            {
                return(node.Update(
                           converter.GenerateConvertToExpression(
                               Visit(node.Expression))));
            }

            return(base.VisitMemberAssignment(node));
        }
            protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
            {
                var e = Visit(node.Expression);

                var es = _tilingState.Pop();

                if (es && CanEvaluate(node.Member)) // TODO: can't distinguish between get and set on members
                {
                    _tilingState.Push(true);
                }
                else
                {
                    _tilingState.Push(false);

                    EvaluateIf(es, ref e);
                }

                return(node.Update(e));
            }
Ejemplo n.º 16
0
        public static bool TryConvert(
            MemberAssignment assignment,
            IQueryProjectionModifier modifier,
            out MemberAssignment converted)
        {
            if (assignment.Expression.NodeType != ExpressionType.Block)
            {
                converted = null;
                return(false);
            }

            var valueBlock      = (BlockExpression)assignment.Expression;
            var finalExpression = valueBlock.Expressions.Last();

            if (finalExpression.NodeType != ExpressionType.Conditional)
            {
                converted = null;
                return(false);
            }

            var tryParseOrDefault = (ConditionalExpression)finalExpression;

            if ((tryParseOrDefault.Test.NodeType != ExpressionType.Call) ||
                (tryParseOrDefault.IfTrue.NodeType != ExpressionType.Parameter))
            {
                converted = null;
                return(false);
            }

            var methodCall = (MethodCallExpression)tryParseOrDefault.Test;

            if (!methodCall.Method.IsStatic || (methodCall.Method.Name != nameof(int.TryParse)))
            {
                converted = null;
                return(false);
            }

            var convertedValue = modifier.Settings.ConvertTryParseCall(methodCall, tryParseOrDefault.IfFalse);

            converted = assignment.Update(convertedValue);
            return(true);
        }
        public static bool TryConvert(
            MemberAssignment assignment,
            IQueryProjectionModifier modifier,
            out MemberAssignment converted)
        {
            if (assignment.Expression.NodeType != ExpressionType.Convert)
            {
                converted = null;
                return(false);
            }

            var conversion = (UnaryExpression)assignment.Expression;

            if (!conversion.Operand.Type.IsNullableType())
            {
                converted = null;
                return(false);
            }

            var value = GetNullCheckedConversion(conversion.Operand, conversion);

            converted = assignment.Update(value);
            return(true);
        }
Ejemplo n.º 18
0
        public void UpdateSameReturnsSame()
        {
            MemberAssignment bind = Expression.Bind(typeof(PropertyAndFields).GetProperty("StringProperty"), Expression.Constant("Hello Property"));

            Assert.Same(bind, bind.Update(bind.Expression));
        }
            protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
            {
                var convertedExpression = Visit(node.Expression);

                return(base.VisitMemberAssignment(node.Update(convertedExpression)));
            }
Ejemplo n.º 20
0
        /// <summary>
        /// 访问 <see cref="MemberAssignment"/>。
        /// </summary>
        /// <param name="assignment"></param>
        /// <returns></returns>
        protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment assignment)
        {
            var e = Visit(assignment.Expression);

            return(assignment.Update(assignment.Member, e));
        }
Ejemplo n.º 21
0
 protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment assgn)
 {
     return(assgn.Update(Visit(assgn.Expression)));
 }
 protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment node, Type expectedType)
 => node.Update(Visit(node.Expression, GetMemberType(node.Member)));
 protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
 {
     return(node.Member == Member?node.Update(Value) : base.VisitMemberAssignment(node));
 }
Ejemplo n.º 24
0
        protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
        {
            var expression = context.Rewrite(node.Expression, Visit);

            return(ReferenceEquals(expression, node.Expression) ? node : node.Update(expression));
        }
Ejemplo n.º 25
0
 /// <summary>
 /// Visits the children of the <see cref="MemberAssignment" />.
 /// </summary>
 /// <param name="node">The expression to visit.</param>
 /// <returns>The modified expression, if it or any subexpression was modified;
 /// otherwise, returns the original expression.</returns>
 protected virtual MemberAssignment VisitMemberAssignment(MemberAssignment node)
 {
     return(node.Update(Visit(node.Expression)));
 }
Ejemplo n.º 26
0
 protected override MemberAssignment VisitMemberAssignment(MemberAssignment node)
 {
     return(node.Update(VisitInternal(node.Expression)));
 }