public NewExpression Update(IEnumerable<Expression> arguments) { if (arguments == Arguments) { return this; } if (Members != null) { return Expression.New(Constructor, arguments, Members); } return Expression.New(Constructor, arguments); } }
//make projections of enums work protected override Expression VisitNew(NewExpression node) { IEnumerable<Expression> arguments = node.Arguments .Select((arg, i) => { Expression newarg = Visit(arg); if (arg.Type.IsEnum && newarg.Type == typeof (Int32)) return Expression.Convert(newarg, arg.Type); //force an in mem convert from int to enum else return newarg; }); return node.Update(arguments); }