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); //// Create a MemberInitExpression that represents initializing //// two members of the 'Animal' class. //System.Linq.Expressions.MemberInitExpression memberInitExpression = // System.Linq.Expressions.Expression.MemberInit( // newAnimal, // speciesMemberBinding); Console.WriteLine(memberInitExpression.ToString()); var expression = Expression.Lambda <Func <Dog, Animal> >(memberInitExpression); var compile = expression.Compile(); var dog = new Dog() { Species = "DOG" }; var test = compile(dog); Console.WriteLine(test.ToJson()); // This code produces the following output: // // new Animal() {Species = "horse", Age = 12} }
internal override Expression VisitMemberInit(MemberInitExpression init) { if (!ClientTypeUtil.TypeOrElementTypeIsEntity(init.Type)) { throw new NotSupportedException(System.Data.Services.Client.Strings.ALinq_ExpressionNotSupportedInProjectionToEntity(this.type, init.ToString())); } ProjectionAnalyzer.Analyze(init, this.box, this.context); return init; }
internal override Expression VisitMemberInit(MemberInitExpression init) { if (!ClientTypeUtil.TypeOrElementTypeIsEntity(init.Type)) { // MemberInit to a complex type is not supported on entity types. throw new NotSupportedException(Strings.ALinq_ExpressionNotSupportedInProjectionToEntity(this.type, init.ToString())); } ProjectionAnalyzer.Analyze(init, this.builder, this.context); return init; }
private void VisitMemberInit(MemberInitExpression node) { foreach (var memberBinding in node.Bindings) { var memberAssignment = memberBinding as MemberAssignment; if (memberAssignment != null) { _mappings.Add(new ProjectionMemberMapping { Expression = memberAssignment.Expression, Member = memberAssignment.Member }); } else { var message = string.Format("Only member assignments are supported in a new expression in $project and $group, but found {0}.", node.ToString()); throw new NotSupportedException(message); } } VisitNew(node.NewExpression); }