protected override Expression VisitNewExpression(NewExpression expression) { var members = expression.Members.ToArray(); for (int i = 0; i < expression.Arguments.Count; i++) { var argument = expression.Arguments[i]; var member = members[i]; _queryBuilder.StartOptional(); var resultExpression = VisitExpression(argument); _queryBuilder.EndOptional(); if (resultExpression is SelectVariableNameExpression) { var varName = (resultExpression as SelectVariableNameExpression).Name; _queryBuilder.AddSelectVariable(varName); _queryBuilder.AddAnonymousMemberMapping(member.Name, varName); } } return(expression); }