Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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);
        }