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