protected override Expression VisitMember(MemberExpression memberExp) { if (memberExp.Expression != null && memberExp.Expression.NodeType == ExpressionType.Parameter) { var typeName = memberExp.Expression.Type.Name; string fieldName = GetFieldName(typeName, memberExp.Member.Name); if (!string.IsNullOrEmpty(Alias)) { fieldName = Alias + "." + GetFieldName(typeName, memberExp.Member.Name); } OrderByFields.Append(string.Format("{0} {1},", fieldName, OrderBy)); return(memberExp); } else if (memberExp.NodeType == ExpressionType.MemberAccess) { object result = Expression.Lambda(memberExp).Compile().DynamicInvoke(); var r = Expression.Constant(result, result.GetType()); this.Visit(r); return(r); } throw new NotSupportedException(string.Format("成员 '{0}’不支持", memberExp.Member.Name)); }