Ejemplo n.º 1
0
 /// <summary>
 /// 委托关联表达式转SQL表达式
 /// </summary>
 /// <param name="expression">委托关联表达式</param>
 /// <param name="isCache">是否缓存</param>
 /// <param name="nameType">获取参数名称方式</param>
 /// <returns>SQL表达式,参数成员名称集合</returns>
 public static keyValue<string, list<string>> Convert(LambdaExpression expression, bool isCache, getNameType nameType)
 {
     nameCache cache;
     if (isCache && expressionCache.TryGetValue(expression, out cache))
     {
         string sql = cache[nameType];
         if (sql != null) return new keyValue<string, list<string>>(sql, cache.ParameterMemberNames);
         converter converter = new converter(expression, nameType);
         cache[nameType] = sql = converter.sql;
         cache.ParameterMemberNames = converter.parameterMemberNames;
         return new keyValue<string, list<string>>(sql, cache.ParameterMemberNames);
     }
     else
     {
         converter converter = new converter(expression, nameType);
         string sql = converter.sql;
         if (isCache)
         {
             expressionCache[expression] = cache = new nameCache();
             cache.ParameterMemberNames = converter.parameterMemberNames;
             cache[nameType] = sql;
         }
         return new keyValue<string, list<string>>(sql, converter.parameterMemberNames);
     }
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 获取表达式缓存
 /// </summary>
 /// <param name="type">获取名称类型</param>
 /// <returns>表达式缓存</returns>
 public string this[getNameType nameType]
 {
     get
     {
         switch (nameType)
         {
             case getNameType.Parameter: return Parameter;
             case getNameType.Entity: return Entity;
             default: return None;
         }
     }
     set
     {
         switch (nameType)
         {
             case getNameType.Parameter:
                 Parameter = value;
                 break;
             case getNameType.Entity:
                 Entity = value;
                 break;
             default:
                 None = value;
                 break;
         }
     }
 }
Ejemplo n.º 3
0
            /// <summary>
            /// 获取表达式缓存
            /// </summary>
            /// <param name="type">获取名称类型</param>
            /// <returns>表达式缓存</returns>
            public string this[getNameType nameType]
            {
                get
                {
                    switch (nameType)
                    {
                    case getNameType.Parameter: return(Parameter);

                    case getNameType.Entity: return(Entity);

                    default: return(None);
                    }
                }
                set
                {
                    switch (nameType)
                    {
                    case getNameType.Parameter:
                        Parameter = value;
                        break;

                    case getNameType.Entity:
                        Entity = value;
                        break;

                    default:
                        None = value;
                        break;
                    }
                }
            }
Ejemplo n.º 4
0
        /// <summary>
        /// 转换器
        /// </summary>
        /// <param name="expression">委托关联表达式</param>
        /// <param name="nameType">获取参数名称方式</param>
        protected converter(LambdaExpression expression, getNameType nameType)
        {
            this.expression = expression;
            this.nameType   = nameType;
            int parameterCount = expression.Parameters.length();

            switch (nameType)
            {
            case getNameType.Parameter:
            case getNameType.Entity:
                if (parameterCount == 0)
                {
                    this.nameType = getNameType.None;
                }
                else if (parameterCount == 1)
                {
                    name = getName(expression.Parameters[0]);
                }
                else
                {
                    names = new staticDictionary <string, string>(expression.Parameters.getArray(parameter => new keyValue <string, string>(parameter.Name, getName(parameter))));
                }
                break;

            default:
                if (parameterCount > 1)
                {
                    fastCSharp.log.Default.Add("不止一个参数 " + parameterCount.toString(), true, true);
                    nameType = getNameType.Entity;
                }
                break;
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 委托关联表达式转SQL表达式
        /// </summary>
        /// <param name="expression">委托关联表达式</param>
        /// <param name="isCache">是否缓存</param>
        /// <param name="nameType">获取参数名称方式</param>
        /// <returns>SQL表达式,参数成员名称集合</returns>
        public static keyValue <string, list <string> > Convert(LambdaExpression expression, bool isCache, getNameType nameType)
        {
            nameCache cache;

            if (isCache && expressionCache.TryGetValue(expression, out cache))
            {
                string sql = cache[nameType];
                if (sql != null)
                {
                    return(new keyValue <string, list <string> >(sql, cache.ParameterMemberNames));
                }
                converter converter = new converter(expression, nameType);
                cache[nameType]            = sql = converter.sql;
                cache.ParameterMemberNames = converter.parameterMemberNames;
                return(new keyValue <string, list <string> >(sql, cache.ParameterMemberNames));
            }
            else
            {
                converter converter = new converter(expression, nameType);
                string    sql       = converter.sql;
                if (isCache)
                {
                    expressionCache[expression] = cache = new nameCache();
                    cache.ParameterMemberNames  = converter.parameterMemberNames;
                    cache[nameType]             = sql;
                }
                return(new keyValue <string, list <string> >(sql, converter.parameterMemberNames));
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// 转换器
 /// </summary>
 /// <param name="expression">委托关联表达式</param>
 /// <param name="nameType">获取参数名称方式</param>
 private converter(LambdaExpression expression, getNameType nameType) : base(expression, nameType)
 {
 }
Ejemplo n.º 7
0
 /// <summary>
 /// 转换器
 /// </summary>
 /// <param name="expression">委托关联表达式</param>
 /// <param name="nameType">获取参数名称方式</param>
 private converter(LambdaExpression expression, getNameType nameType) : base(expression, nameType) { }
Ejemplo n.º 8
0
 /// <summary>
 /// 转换器
 /// </summary>
 /// <param name="expression">委托关联表达式</param>
 /// <param name="nameType">获取参数名称方式</param>
 protected converter(LambdaExpression expression, getNameType nameType)
 {
     this.expression = expression;
     this.nameType = nameType;
     int parameterCount = expression.Parameters.length();
     switch (nameType)
     {
         case getNameType.Parameter:
         case getNameType.Entity:
             if (parameterCount == 0) this.nameType = getNameType.None;
             else if (parameterCount == 1) name = getName(expression.Parameters[0]);
             else names = new staticDictionary<string, string>(expression.Parameters.getArray(parameter => new keyValue<string, string>(parameter.Name, getName(parameter))));
             break;
         default:
             if (parameterCount > 1)
             {
                 fastCSharp.log.Default.Add("不止一个参数 " + parameterCount.toString(), true, true);
                 nameType = getNameType.Entity;
             }
             break;
     }
 }