/// <summary> /// 转换UnaryExpression /// </summary> /// <param name="expression"></param>w /// <returns></returns> protected virtual string ConvertMemberExpression(MemberExpression expression) { var memberExpression = expression; while (true) { if (memberExpression == null || memberExpression.Expression == null) { break; } if (memberExpression.Expression.NodeType == ExpressionType.Parameter) { return(ExpressionHelper.ReplaceExpressionParamter(expression.ToString())); } if (memberExpression.Expression.NodeType == ExpressionType.MemberAccess) { memberExpression = memberExpression.Expression as MemberExpression; } else { break; } } var name = CreateParamterName(); SetParameter(name, expression.GetExpressionValue()); return(string.Format("@{0}", name)); }
private static NodeBase Resolve(MemberExpression memberExpression, MemberExpression rootExpression = null) { rootExpression = rootExpression ?? memberExpression; switch (memberExpression.Expression.NodeType) { case ExpressionType.Parameter: return(new MemberNode { TableName = TableInfo.GetTableName(rootExpression), FieldName = TableInfo.GetColumnName(rootExpression) }); case ExpressionType.MemberAccess: return(Resolve(memberExpression.Expression as MemberExpression, rootExpression)); case ExpressionType.Call: case ExpressionType.Constant: return(new ValueNode { Value = rootExpression.GetExpressionValue() }); default: throw new ArgumentException("Expected member expression"); } }