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)); }
/// <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 }
protected override MemberAssignment VisitMemberAssignment(MemberAssignment node) { if (node.Member.Name == _propName) { return(node.Update(_newExpr)); } return(base.VisitMemberAssignment(node)); }
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)); }
private static MemberAssignment ConvertToMaterialisation( MemberAssignment assignment, IQueryProjectionModifier modifier) { var materialisedNestedProjection = GetMaterialisedNestedProjection(assignment.Expression); var modifiedProjection = modifier.Modify(materialisedNestedProjection); return(assignment.Update(modifiedProjection)); }
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)); }
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)); }
protected override MemberAssignment VisitMemberAssignment(MemberAssignment node) { var newExpression = Visit(node.Expression); var changed = newExpression != node.Expression; if (changed) { return(node.Update(newExpression)); } return(node); }
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)); }
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)); }
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); }
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))); }
/// <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)); }
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)); }
protected override MemberAssignment VisitMemberAssignment(MemberAssignment node) { var expression = context.Rewrite(node.Expression, Visit); return(ReferenceEquals(expression, node.Expression) ? node : node.Update(expression)); }
/// <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))); }
protected override MemberAssignment VisitMemberAssignment(MemberAssignment node) { return(node.Update(VisitInternal(node.Expression))); }