/// <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); } }
/// <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; } } }
/// <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; } } }
/// <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; } }
/// <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)); } }
/// <summary> /// 转换器 /// </summary> /// <param name="expression">委托关联表达式</param> /// <param name="nameType">获取参数名称方式</param> private converter(LambdaExpression expression, getNameType nameType) : base(expression, nameType) { }
/// <summary> /// 转换器 /// </summary> /// <param name="expression">委托关联表达式</param> /// <param name="nameType">获取参数名称方式</param> private converter(LambdaExpression expression, getNameType nameType) : base(expression, nameType) { }
/// <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; } }