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);
        }