public static string GetMetaFieldName <T>(int tabIdx, string propertyName) { string fieldName = string.Empty; var field = DbMetaDataManager.GetFieldName(typeof(T), propertyName); if (field != null) { fieldName = string.Format("T{0}.{1}", tabIdx, field); } return(fieldName); }
protected override Expression VisitMember(MemberExpression node) { var fieldName = DbMetaDataManager.GetFieldName(node.Member.DeclaringType, node.Member.Name); string tn = string.Empty; if (Ass.TryGetValue(node.Member.DeclaringType, out tn)) { sb.Append(tn); sb.Append("."); } sb.Append(fieldName); return(node); }
/// <summary> /// 访问成员 /// </summary> /// <param name="node"></param> /// <returns></returns> protected override Expression VisitMember(MemberExpression node) { if (node.Expression != null && (node.Expression.NodeType == ExpressionType.Parameter || node.Expression.NodeType == ExpressionType.MemberAccess) && isleft) { bool isAsName = false; var pse = node.Expression as ParameterExpression; if (pse != null && pse.Type == node.Member.DeclaringType) { if (!Ass.Keys.Contains(pse.Type)) { Ass.TryAdd(pse.Type, pse.Name); } isAsName = true; } string ts = string.Empty; if (!isAsName && !Ass.TryGetValue(node.Member.DeclaringType, out ts)) { GetParentMemberName(node.Expression); } var fieldName = DbMetaDataManager.GetFieldName(node.Member.DeclaringType, node.Member.Name); string tn = string.Empty; if (Ass.TryGetValue(node.Member.DeclaringType, out tn)) { sb.Append(tn); sb.Append("."); } sb.Append(fieldName); return(node); } else { LambdaExpression lambda = Expression.Lambda(node); var fn = lambda.Compile(); this.Visit(Expression.Constant(fn.DynamicInvoke(null), node.Type)); } return(node); }
protected override MemberAssignment VisitMemberAssignment(MemberAssignment node) { string propertyName = node.Member.Name; string fieldName = DbMetaDataManager.GetFieldName(node.Member.DeclaringType, propertyName); if (node.Expression.NodeType == ExpressionType.Call) { VisitMethodCall((MethodCallExpression)node.Expression, fieldName); } else if (node.Expression.NodeType == ExpressionType.Convert) { var ue = node.Expression as UnaryExpression; var call = ue.Operand as MethodCallExpression; if (call != null) { this.VisitMethodCall(call, fieldName); } else { this.MyVisitMember(ue.Operand as MemberExpression, fieldName); } } else { parameters.Add(fieldName, new Parameter(ParamPrefix + fieldName, null)); var constant = node.Expression as ConstantExpression; if (constant != null) { VisitConstant(constant, fieldName); } else { LambdaExpression lambda = Expression.Lambda(node.Expression); var fn = lambda.Compile(); VisitConstant(Expression.Constant(fn.DynamicInvoke(null), node.Expression.Type), fieldName); } } return(node); }