protected override Expression VisitMember(MemberExpression node)
        {
            if (node.IsPropertyOrField())
            {
                bool hasSeparator = false;

                foreach (MemberExpression x in node.GetPathIterator().Reverse())
                {
                    if (hasSeparator)
                    {
                        Query.AppendPropertyOrFieldPathSeparator();
                    }

                    hasSeparator = true;
                    Query.AppendMember(x.Member);
                }


                return(node);
            }

            Query.AppendValue(node.Type, Expression.Lambda(node).Compile().DynamicInvoke());
            return(node);
        }