public static Sql Delete <TModel>(Expression <Func <TModel, bool> > exp) where TModel : class, new() { Sql sql = new Sql(); string tableName = typeof(TModel).Name; StringBuilder text = new StringBuilder(); text.Append($"DELETE {tableName}"); if (exp != null) { text.Append("WHERE "); string whereStr = SqlBuilderExpression.ResolveExpression(exp); if (string.IsNullOrEmpty(whereStr)) { throw new ArgumentNullException($"解析{nameof(exp)} 出错"); } text.Append(whereStr); sql.Where = whereStr; sql.TableNames = new List <string>() { tableName }; sql.Commandtext = text.ToString(); } return(sql); }
//多表 private static Sql Find(Expression exp) { Sql sql = new Sql(); StringBuilder text = new StringBuilder(); text.AppendLine("SELECT "); if (exp == null) { throw new Exception(nameof(exp)); } List <string> tableNames = new List <string>(); if (exp is LambdaExpression) { LambdaExpression lambdaExpression = exp as LambdaExpression; List <ParameterExpression> parameterExpressions = lambdaExpression.Parameters.ToList(); if (parameterExpressions == null) { throw new Exception(nameof(parameterExpressions)); } var index = 0; foreach (var parameterExpression in parameterExpressions) { if (index == parameterExpressions.Count - 1) { text.AppendLine($"{parameterExpression.Type.Name}.* "); } else { text.AppendLine($"{parameterExpression.Type.Name}.*, "); } index++; sql.ColumnNames.Add($"{parameterExpression.Type.Name}.*, "); } text.AppendLine($"FROM [{parameterExpressions.FirstOrDefault().Type.Name }] AS {parameterExpressions.FirstOrDefault().Type.Name }"); sql.TableNames.Add(parameterExpressions.FirstOrDefault().Type.Name); //条件 string on = SqlBuilderExpression.ResolveExpression(exp, isAppendTalbeName: true); List <string> onSplits = on.Split(new string[] { "\r\n" }, StringSplitOptions.None)?.ToList(); var talbleNameIndex = 1; for (int i = 0; i < onSplits.Count; i++) { if (onSplits[i].Equals(JoinType.InnerJoin) || onSplits[i].Equals(JoinType.LeftJoin)) { onSplits[i] = $"{onSplits[i]} {parameterExpressions[talbleNameIndex].Type.Name} On"; sql.TableNames.Add(parameterExpressions[talbleNameIndex].Type.Name); talbleNameIndex++; } } text.AppendLine(string.Join(" ", onSplits)); sql.Commandtext = text.ToString(); return(sql); } else { throw new Exception("不是 LambdaExpression表达式,无法解析"); } }
public static Sql Update <TModel>(TModel model, Expression <Func <TModel, bool> > exp) where TModel : class, new() { Sql sql = new Sql(); string tableName = model.GetType().Name; var ps = model.GetType().GetProperties(); StringBuilder text = new StringBuilder(); text.Append($"UPDATE {tableName} SET "); foreach (var p in ps) { //跳过主健 if (p.PropertyType.Name.Equals("Id", StringComparison.OrdinalIgnoreCase)) { continue; } if (p.PropertyType.IsArray) { continue; } if (p.PropertyType.IsGenericType) { continue; } if (p.PropertyType.IsGenericTypeDefinition) { var objValue = ReflectionHelper.ChangeValue(p, p.GetValue(model)); var colunmName = p.PropertyType.GetGenericArguments().FirstOrDefault().Name; sql.ColumnNames.Add(colunmName); text.Append($"[{colunmName}] = {objValue}"); } else { var objValue = ReflectionHelper.ChangeValue(p, p.GetValue(model)); var colunmName = p.Name; text.Append($"[{colunmName}] = {objValue}"); } } if (exp != null) { text.Append("WHERE "); string whereStr = SqlBuilderExpression.ResolveExpression(exp); if (string.IsNullOrEmpty(whereStr)) { throw new ArgumentNullException($"解析{nameof(exp)} 出错"); } text.Append(whereStr); sql.Where = whereStr; sql.TableNames = new List <string>() { tableName }; sql.Commandtext = text.ToString(); } return(sql); }
public QueryExpression <TModel> Or(Expression <Func <TModel, bool> > exp) { if (StringWhere.ToString().Substring(0, @where.Length) != where) { throw new Exception($"调用Add之前先调用 {nameof(True)} 方法 "); } StringWhere.AppendLine($" Or {SqlBuilderExpression.ResolveExpression(exp, isAppendTalbeName: true)}"); return(this); }
public static Sql GetMin <TModel, TColunmType>(Expression <Func <TModel, TColunmType> > exp) where TModel : class, new() { Sql sql = new Sql(); string tableName = typeof(TModel).Name; if (exp == null) { throw new ArgumentNullException(nameof(exp)); } string maxColumnName = SqlBuilderExpression.ResolveExpression(exp); StringBuilder text = new StringBuilder(); text.AppendLine($"SELECT Min({maxColumnName}) FROM [{tableName}] "); sql.Commandtext = text.ToString(); return(sql); }
/// <summary> /// 一表,视图 /// </summary> /// <typeparam name="TModel"></typeparam> /// <param name="exp"></param> /// <returns></returns> public static Sql GetList <TModel>(Expression <Func <TModel, bool> > exp) where TModel : class, new() { Sql sql = new Sql(); var selectSql = Find <TModel>(1); StringBuilder text = new StringBuilder(); text.AppendLine(selectSql); if (exp == null) { throw new ArgumentNullException($"{nameof(exp)} "); } StringBuilder where = new StringBuilder(); where.AppendLine("WHERE 1= 1"); where.AppendLine(SqlBuilderExpression.ResolveExpression(exp)); if (string.IsNullOrEmpty(where.ToString())) { throw new ArgumentNullException($"解析{nameof(exp)} 出错"); } text.AppendLine(where.ToString()); sql.Commandtext = text.ToString(); sql.Where = where.ToString(); return(sql); }