Update() публичный Метод

Creates a new expression that is like this one, but using the supplied children. If all of the children are the same, it will return this expression.
public Update ( Expression expression ) : MemberExpression
expression Expression The property of the result.
Результат MemberExpression
Пример #1
0
        /// <summary>
        ///     Visits the children of the <see cref="MemberExpression" />.
        /// </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 internal virtual Expression VisitMember(MemberExpression node)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            return(node.Update(Visit(node.Expression)));
        }
        protected override Expression VisitMember(MemberExpression memberExpression)
        {
            var newExpression = Visit(memberExpression.Expression);

            var subQueryExpression = newExpression as SubQueryExpression;
            var subSelector = subQueryExpression?.QueryModel.SelectClause.Selector;

            if (subSelector is QuerySourceReferenceExpression
                || subSelector is SubQueryExpression)
            {
                var subQueryModel = subQueryExpression.QueryModel;

                subQueryModel.SelectClause.Selector = VisitMember(memberExpression.Update(subSelector));
                subQueryModel.ResultTypeOverride = subQueryModel.SelectClause.Selector.Type;

                return new SubQueryExpression(subQueryModel);
            }

            return memberExpression.Update(newExpression);
        }
Пример #3
0
 protected override Expression VisitMember(MemberExpression m)
 {
     Expression source = this.Visit(m.Expression);
     switch (source.NodeType)
     {
         case ExpressionType.Call:
             MethodCallExpression call = (MethodCallExpression)source;
             if (call != null && call.Method.Name == "NewDefaultProjectedObject")
             {
                 var bindings = ((ConstantExpression)call.Arguments[0]).Value as ReadOnlyCollection<MemberBinding>;
                 for (int i = 0, n = bindings.Count; i < n; i++)
                 {
                     MemberAssignment assign = bindings[i] as MemberAssignment;
                     if (assign != null && MembersMatch(assign.Member, m.Member))
                     {
                         return assign.Expression;
                     }
                 }
             }
             break;
         case ExpressionType.MemberInit:
             MemberInitExpression min = (MemberInitExpression)source;
             for (int i = 0, n = min.Bindings.Count; i < n; i++)
             {
                 MemberAssignment assign = min.Bindings[i] as MemberAssignment;
                 if (assign != null && MembersMatch(assign.Member, m.Member))
                 {
                     return assign.Expression;
                 }
             }
             break;
         case ExpressionType.New:
             NewExpression nex = (NewExpression)source;
             if (nex.Members != null)
             {
                 for (int i = 0, n = nex.Members.Count; i < n; i++)
                 {
                     if (MembersMatch(nex.Members[i], m.Member))
                     {
                         return nex.Arguments[i];
                     }
                 }
             }
             break;
     }
     return m.Update(source);
 }
Пример #4
0
        protected override ExpressionTree VisitMember(MemberExpression node)
        {
            MemberExpression expression;

            if (node.Expression != null)
            {
                CheckChildrenCount(1);

                var e = ExtractChildExpression(0);

                expression = node.Update(e);
            }
            else
            {
                CheckChildrenCount(0);

                expression = node;
            }

            return(CreateExpressionTree(expression));
        }
Пример #5
0
 /// <summary>
 /// Visits the children of the <see cref="MemberExpression"/>.
 /// </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 internal virtual Expression VisitMember(MemberExpression node)
 {
     return(node.Update(Visit(node.Expression)));
 }
Пример #6
0
        /// <summary>
        /// Visits a member expression with the specified <paramref name="isLval"/> behavior.
        /// See <see cref="VisitMember(MemberExpression)"/> for more information about visitor behavior.
        /// </summary>
        /// <param name="node">The member expression to visit.</param>
        /// <param name="isLval">Indicates whether the member expression occurs in an assignment target position.</param>
        /// <returns>The result of visiting the member expression.</returns>
        protected virtual Expression VisitMember(MemberExpression node, bool isLval)
        {
            var expression = isLval ? VisitLval(node.Expression) : Visit(node.Expression);

            return(node.Update(expression));
        }