/// <summary> /// 获得Sqlite帮助类 /// </summary> /// <returns></returns> public static SqlOpertionHelper GetSqliteHelper(string KeyLock) { var Key = KeyLock.ToString(); var SqliteHelper = SqliteHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (SqliteHelper == null) { lock (LockObj) { SqliteHelper = SqliteHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (SqliteHelper == null) { string sqlConnString = ConfigurationManager.ConnectionStrings["SqliteConn"].ConnectionString; SqliteHelper = new SqlOpertionHelper(sqlConnString, DateBaseType.SQLLITE); SqliteHelperDic.Add(Key, SqliteHelper); } } } return(SqliteHelper); }
/// <summary> /// 获得Access帮助类 /// </summary> /// <returns></returns> public static SqlOpertionHelper GetAccessHelper(string KeyLock) { var Key = KeyLock.ToString(); var AccessHelper = AccessHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (AccessHelper == null) { lock (LockObj) { AccessHelper = AccessHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (AccessHelper == null) { string sqlConnString = ConfigurationManager.ConnectionStrings["AccessConn"].ConnectionString; AccessHelper = new SqlOpertionHelper(sqlConnString, DateBaseType.ACCESS); AccessHelperDic.Add(Key, AccessHelper); } } } return(AccessHelper); }
/// <summary> /// 获得MySql帮助类 /// </summary> /// <returns></returns> public static SqlOpertionHelper GetMySqlHelper(string KeyLock) { var Key = KeyLock.ToString(); var MySqlHelper = MySqlHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (MySqlHelper == null) { lock (LockObj) { MySqlHelper = MySqlHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (MySqlHelper == null) { string sqlConnString = ConfigurationManager.ConnectionStrings["MySqlConn"].ConnectionString; MySqlHelper = new SqlOpertionHelper(sqlConnString, DateBaseType.MYSQL); MySqlHelperDic.Add(Key, MySqlHelper); } } } return(MySqlHelper);; }
/// <summary> /// 获得Oracle帮助类 /// </summary> /// <returns></returns> public static SqlOpertionHelper GetOracleHelper(string KeyLock) { var Key = KeyLock.ToString(); var OracleHelper = OracleHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (OracleHelper == null) { lock (LockObj) { OracleHelper = OracleHelperDic.Where(p => p.Key == Key).FirstOrDefault().Value; if (OracleHelper == null) { string sqlConnString = ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString; OracleHelper = new SqlOpertionHelper(sqlConnString, DateBaseType.ORACLE); OracleHelperDic.Add(Key, OracleHelper); } } } return(OracleHelper); }
public LambdaDelete(SqlOpertionHelper helper) : base(helper) { }
public LambdaBase(SqlOpertionHelper helper) { SqlHelper = helper; SqlHelper.CreatConn(); }
public LambdaUpdate(SqlOpertionHelper helper) : base(helper) { }
public LambdaQuery(SqlOpertionHelper helper) : base(helper) { }
public LambdaInsert(SqlOpertionHelper helper) : base(helper) { }
/// <summary> /// 拆分表达式树 /// </summary> /// <param name="left"></param> /// <param name="right"></param> /// <param name="type"></param> /// <returns></returns> public string BinaryExpressionHandler(Expression left, Expression right, ExpressionType type, SqlOpertionHelper helper, Enum_Opertion opertion, ref List <IDbDataParameter> List_SqlParameter) { StringBuilder sb = new StringBuilder(); if (opertion == Enum_Opertion.Where) { sb.Append("("); } string needParKey = "=,>,<,>=,<=,<>"; string leftPar = RouteExpressionHandler(left, helper, opertion, ref List_SqlParameter); string typeStr = null; if (opertion == Enum_Opertion.Where) { typeStr = ExpressionTypeCast(type); } else if (opertion == Enum_Opertion.Set) { typeStr = ExpressionTypeCastSet(type); } var isRight = needParKey.IndexOf(typeStr) > -1; string rightPar = RouteExpressionHandler(right, helper, opertion, ref List_SqlParameter, isRight); if (!ContainsKey(leftPar) && !ContainsKey(rightPar)) { var Count = List_SqlParameter.Where(p => p.ParameterName.Contains("@" + leftPar)).Count(); IDbDataParameter parameter = helper.GetParameter(); parameter.ParameterName = "@" + leftPar + Count; if (rightPar.ToLower() == "true") { parameter.Value = true; } else if (rightPar.ToLower() == "false") { parameter.Value = false; } else { parameter.Value = rightPar; } List_SqlParameter.Add(parameter); rightPar = "@" + leftPar + Count; } string appendLeft = leftPar; sb.Append(appendLeft);//字段名称 if (rightPar.ToUpper() == "NULL") { if (typeStr == "=") { rightPar = " IS NULL "; } else if (typeStr == "<>") { rightPar = " IS NOT NULL "; } } else { sb.Append(typeStr); } sb.Append(rightPar); if (opertion == Enum_Opertion.Where) { sb.Append(")"); } return(sb.ToString()); }
/// <summary> /// 解析表达式 /// </summary> /// <param name="exp"></param> /// <param name="isRight"></param> /// <returns></returns> public string RouteExpressionHandler(Expression exp, SqlOpertionHelper helper, Enum_Opertion opertion, ref List <IDbDataParameter> List_SqlParameter, bool isRight = false) { if (exp is BinaryExpression) { BinaryExpression be = (BinaryExpression)exp; //重新拆分树,形成递归 return(BinaryExpressionHandler(be.Left, be.Right, be.NodeType, helper, opertion, ref List_SqlParameter)); } else if (exp is MemberExpression) { MemberExpression mExp = (MemberExpression)exp; if (isRight)//按表达式右边值 { var obj = Expression.Lambda(mExp).Compile().DynamicInvoke(); if (obj is Enum) { obj = (int)obj; } return(obj + ""); } return(mExp.Member.Name); } else if (exp is NewArrayExpression) { #region 数组 NewArrayExpression naExp = (NewArrayExpression)exp; StringBuilder sb = new StringBuilder(); foreach (Expression expression in naExp.Expressions) { sb.AppendFormat(",{0}", RouteExpressionHandler(expression, helper, opertion, ref List_SqlParameter)); } return(sb.Length == 0 ? "" : sb.Remove(0, 1).ToString()); #endregion } else if (exp is MethodCallExpression) { MethodCallExpression cExp = (MethodCallExpression)exp; if (isRight) { return(Expression.Lambda(exp).Compile().DynamicInvoke() + ""); } #region 数据库Like方法 if (cExp.Method.Name == "Contains" || cExp.Method.Name.ToLower() == "like") { if (cExp.Arguments.Count == 1) { var ParmName = cExp.Object.ToString(); var ParmLastName = ParmName.Split('.').Last(); string Search_Value = RouteExpressionHandler(cExp.Arguments[0], helper, opertion, ref List_SqlParameter, true); var Count = List_SqlParameter.Where(p => p.ParameterName.Contains("@" + ParmLastName)).Count(); IDbDataParameter parameter = helper.GetParameter(); parameter.ParameterName = "@" + ParmLastName + Count; parameter.Value = "%" + Search_Value + "%"; List_SqlParameter.Add(parameter); return(ParmLastName + " like @" + ParmLastName + Count); } else if (cExp.Arguments.Count == 2) { MemberExpression ConstantExp = cExp.Arguments[0] as MemberExpression; string ParmLastName = ""; if (ConstantExp != null) { ParmLastName = ConstantExp.Member.Name; } else { UnaryExpression NewNameExp = cExp.Arguments[0] as UnaryExpression; MemberExpression proexp = NewNameExp.Operand as MemberExpression; ParmLastName = proexp.Member.Name; } string Search_Value = RouteExpressionHandler(cExp.Arguments[1], helper, opertion, ref List_SqlParameter, true); var Count = List_SqlParameter.Where(p => p.ParameterName.Contains("@" + ParmLastName)).Count(); IDbDataParameter parameter = helper.GetParameter(); parameter.ParameterName = "@" + ParmLastName + Count; parameter.Value = "%" + Search_Value + "%"; List_SqlParameter.Add(parameter); return(ParmLastName + " like @" + ParmLastName + Count); } } #endregion #region 数据库In函数 else if (cExp.Method.Name == "ContainsIn" || cExp.Method.Name.ToLower() == "in") { if (cExp.Arguments.Count == 1) { var ParmName = cExp.Object.ToString(); var ParmLastName = ParmName.Split('.').Last(); MemberExpression ConstantExp = cExp.Arguments[0] as MemberExpression; var obj = (List <string>)Expression.Lambda(ConstantExp).Compile().DynamicInvoke(); StringBuilder builder = new StringBuilder(); if (obj != null && obj.Count > 0) { builder.Append(ParmLastName).Append(" in ("); foreach (var item in obj) { var Count = List_SqlParameter.Where(p => p.ParameterName.Contains("@" + ParmLastName)).Count(); IDbDataParameter parameter = helper.GetParameter(); parameter.ParameterName = "@" + ParmLastName + Count; parameter.Value = item; List_SqlParameter.Add(parameter); builder.Append("@").Append(ParmLastName).Append(Count).Append(","); } builder.Remove(builder.Length - 1, 1).Append(") "); } else { builder.Append(ParmLastName).Append(" in (-1)"); } return(builder.ToString()); } else if (cExp.Arguments.Count == 2) { MemberExpression NameExp = cExp.Arguments[0] as MemberExpression; string ParmLastName = ""; if (NameExp != null) { ParmLastName = NameExp.Member.Name; } else { UnaryExpression NewNameExp = cExp.Arguments[0] as UnaryExpression; MemberExpression proexp = NewNameExp.Operand as MemberExpression; ParmLastName = proexp.Member.Name; } MemberExpression ConstantExp = cExp.Arguments[1] as MemberExpression; var obj = (List <string>)Expression.Lambda(ConstantExp).Compile().DynamicInvoke(); StringBuilder builder = new StringBuilder(); if (obj != null && obj.Count > 0) { builder.Append(ParmLastName).Append(" in ("); foreach (var item in obj) { var Count = List_SqlParameter.Where(p => p.ParameterName.Contains("@" + ParmLastName)).Count(); IDbDataParameter parameter = helper.GetParameter(); parameter.ParameterName = "@" + ParmLastName + Count; parameter.Value = item; List_SqlParameter.Add(parameter); builder.Append("@").Append(ParmLastName).Append(Count).Append(","); } builder.Remove(builder.Length - 1, 1).Append(") "); } else { builder.Append(ParmLastName).Append(" in (-1)"); } return(builder.ToString()); } } #endregion #region 数据库NotIn函数 else if (cExp.Method.Name == "ContainsNotIn" || cExp.Method.Name.ToLower() == "notin") { if (cExp.Arguments.Count == 1) { var ParmName = cExp.Object.ToString(); var ParmLastName = ParmName.Split('.').Last(); MemberExpression ConstantExp = cExp.Arguments[0] as MemberExpression; var obj = (List <string>)Expression.Lambda(ConstantExp).Compile().DynamicInvoke(); StringBuilder builder = new StringBuilder(); if (obj != null && obj.Count > 0) { builder.Append(ParmLastName).Append(" not in ("); foreach (var item in obj) { var Count = List_SqlParameter.Where(p => p.ParameterName.Contains("@" + ParmLastName)).Count(); IDbDataParameter parameter = helper.GetParameter(); parameter.ParameterName = "@" + ParmLastName + Count; parameter.Value = item; List_SqlParameter.Add(parameter); builder.Append("@").Append(ParmLastName).Append(Count).Append(","); } builder.Remove(builder.Length - 1, 1).Append(") "); } else { builder.Append(ParmLastName).Append(" not in (-1)"); } return(builder.ToString()); } else if (cExp.Arguments.Count == 2) { MemberExpression NameExp = cExp.Arguments[0] as MemberExpression; string ParmLastName = ""; if (NameExp != null) { ParmLastName = NameExp.Member.Name; } else { UnaryExpression NewNameExp = cExp.Arguments[0] as UnaryExpression; MemberExpression proexp = NewNameExp.Operand as MemberExpression; ParmLastName = proexp.Member.Name; } MemberExpression ConstantExp = cExp.Arguments[1] as MemberExpression; var obj = (List <object>)Expression.Lambda(ConstantExp).Compile().DynamicInvoke(); StringBuilder builder = new StringBuilder(); if (obj != null && obj.Count > 0) { builder.Append(ParmLastName).Append(" not in ("); foreach (var item in obj) { var Count = List_SqlParameter.Where(p => p.ParameterName.Contains("@" + ParmLastName)).Count(); IDbDataParameter parameter = helper.GetParameter(); parameter.ParameterName = "@" + ParmLastName + Count; parameter.Value = item; List_SqlParameter.Add(parameter); builder.Append("@").Append(ParmLastName).Append(Count).Append(","); } builder.Remove(builder.Length - 1, 1).Append(") "); } else { builder.Append(ParmLastName).Append(" not in (-1)"); } return(builder.ToString()); } } #endregion //在这里解析方法 throw new Exception("暂不支持"); } else if (exp is ConstantExpression) { #region 常量 ConstantExpression cExp = (ConstantExpression)exp; if (cExp.Value == null) { return("null"); } else { SqlParameter parameter = new SqlParameter("cExp", cExp.Value); return(cExp.Value.ToString()); } #endregion } else if (exp is UnaryExpression) { UnaryExpression ue = ((UnaryExpression)exp); return(RouteExpressionHandler(ue.Operand, helper, opertion, ref List_SqlParameter, isRight)); } return(null); }