public System.Linq.Expressions.Expression GetConstructorExpression()
 {
     System.Linq.Expressions.ConstantExpression value = System.Linq.Expressions.Expression.Constant(this.Value, typeof(double));
     System.Linq.Expressions.ConstantExpression units = System.Linq.Expressions.Expression.Constant(this.Units, typeof(PageUnits));
     System.Linq.Expressions.NewExpression      ctor  = System.Linq.Expressions.Expression.New(ctorRef, value, units);
     return(ctor);
 }
        public static void CreateMemberInitExpression()
        {
            System.Linq.Expressions.NewExpression newAnimal =
                System.Linq.Expressions.Expression.New(typeof(Animal));

            System.Reflection.MemberInfo speciesMember =
                typeof(Animal).GetMember("Species")[0];
            System.Reflection.MemberInfo ageMember =
                typeof(Animal).GetMember("Age")[0];

            // Create a MemberBinding object for each member
            // that you want to initialize.
            System.Linq.Expressions.MemberBinding speciesMemberBinding =
                System.Linq.Expressions.Expression.Bind(
                    speciesMember,
                    System.Linq.Expressions.Expression.Constant("horse"));
            System.Linq.Expressions.MemberBinding ageMemberBinding =
                System.Linq.Expressions.Expression.Bind(
                    ageMember,
                    System.Linq.Expressions.Expression.Constant(12));

            // Create a MemberInitExpression that represents initializing
            // two members of the 'Animal' class.
            System.Linq.Expressions.MemberInitExpression memberInitExpression =
                System.Linq.Expressions.Expression.MemberInit(
                    newAnimal,
                    speciesMemberBinding,
                    ageMemberBinding);

            Console.WriteLine(memberInitExpression.ToString());

            // This code produces the following output:
            //
            // new Animal() {Species = "horse", Age = 12}
        }
 public ListInitExpression Update(System.Linq.Expressions.NewExpression newExpression, IEnumerable <ElementInit> initializers)
 {
     if ((newExpression == this.NewExpression) && (initializers == this.Initializers))
     {
         return(this);
     }
     return(Expression.ListInit(newExpression, initializers));
 }
 public MemberInitExpression Update(System.Linq.Expressions.NewExpression newExpression, IEnumerable <MemberBinding> bindings)
 {
     if ((newExpression == this.NewExpression) && (bindings == this.Bindings))
     {
         return(this);
     }
     return(Expression.MemberInit(newExpression, bindings));
 }
        static void New()
        {
            // <Snippet10>
            // Create a NewExpression that represents constructing
            // a new instance of Dictionary<int, string>.
            System.Linq.Expressions.NewExpression newDictionaryExpression =
                System.Linq.Expressions.Expression.New(typeof(Dictionary <int, string>));

            Console.WriteLine(newDictionaryExpression.ToString());

            // This code produces the following output:
            //
            // new Dictionary`2()
            // </Snippet10>
        }
        static void ListInit()
        {
            // <Snippet7>
            string tree1 = "maple";
            string tree2 = "oak";

            System.Reflection.MethodInfo addMethod = typeof(Dictionary <int, string>).GetMethod("Add");

            // Create two ElementInit objects that represent the
            // two key-value pairs to add to the Dictionary.
            System.Linq.Expressions.ElementInit elementInit1 =
                System.Linq.Expressions.Expression.ElementInit(
                    addMethod,
                    System.Linq.Expressions.Expression.Constant(tree1.Length),
                    System.Linq.Expressions.Expression.Constant(tree1));
            System.Linq.Expressions.ElementInit elementInit2 =
                System.Linq.Expressions.Expression.ElementInit(
                    addMethod,
                    System.Linq.Expressions.Expression.Constant(tree2.Length),
                    System.Linq.Expressions.Expression.Constant(tree2));

            // Create a NewExpression that represents constructing
            // a new instance of Dictionary<int, string>.
            System.Linq.Expressions.NewExpression newDictionaryExpression =
                System.Linq.Expressions.Expression.New(typeof(Dictionary <int, string>));

            // Create a ListInitExpression that represents initializing
            // a new Dictionary<> instance with two key-value pairs.
            System.Linq.Expressions.ListInitExpression listInitExpression =
                System.Linq.Expressions.Expression.ListInit(
                    newDictionaryExpression,
                    elementInit1,
                    elementInit2);

            Console.WriteLine(listInitExpression.ToString());

            // This code produces the following output:
            //
            // new Dictionary`2() {Void Add(Int32, System.String)(5,"maple"),
            // Void Add(Int32, System.String)(3,"oak")}
            // </Snippet7>
        }
Exemple #7
0
        protected override System.Linq.Expressions.NewExpression VisitNew(System.Linq.Expressions.NewExpression nex)
        {
            int ndx = 0;

            foreach (System.Linq.Expressions.Expression exp in nex.Arguments)
            {
                this._foundSpecialMethod = false;
                this._foundAs            = true;//New的方式都要加的
                _strSql.Append(",");
                _ParamSql.Append(",");
                this.Visit(exp);
                if (this.ExcuteType == DMSExcuteType.SELECT && this._CurrentMemberInfo != null)
                {
                    MemberInfo memberInfo = nex.Members[ndx];
                    string     text       = GetMemberInfoName(memberInfo.Name);
                    if (text != this._CurrentMemberInfo.Name || this._foundSpecialMethod == true)
                    {
                        //增加As
                        this._strSql.Append(this.Provider.As);
                        if (this.SplitExpression.TableMapping.TokenFlag == true)
                        {
                            text = this.Provider.BuildColumnName(text);
                        }
                        this._strSql.Append(text);
                        this._ParamSql.Append(text);
                    }
                    else
                    {
                        if (this.SplitExpression.TableMapping.TokenFlag == true)
                        {
                            text = this.Provider.BuildColumnName(text);
                        }
                        this._ParamSql.Append(text);
                    }
                }
                ndx++;
            }
            return(nex);
        }
 internal ListInitExpression(System.Linq.Expressions.NewExpression newExpression, ReadOnlyCollection <ElementInit> initializers)
 {
     this._newExpression = newExpression;
     this._initializers  = initializers;
 }
 internal ListInitExpression(System.Linq.Expressions.NewExpression newExpression, ReadOnlyCollection<ElementInit> initializers)
 {
     this._newExpression = newExpression;
     this._initializers = initializers;
 }
 internal MemberInitExpression(System.Linq.Expressions.NewExpression newExpression, ReadOnlyCollection <MemberBinding> bindings)
 {
     this._newExpression = newExpression;
     this._bindings      = bindings;
 }
 internal MemberInitExpression(System.Linq.Expressions.NewExpression newExpression, ReadOnlyCollection<MemberBinding> bindings)
 {
     this._newExpression = newExpression;
     this._bindings = bindings;
 }
 protected override void PVisitNew(System.Linq.Expressions.NewExpression nex)
 {
     Push(walkerFactory.FromConstrucorNode(nex));
     base.PVisitNew(nex);
 }