From 4abd77972cef2b35c6d163d1acb90512cfcca263 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 22 Oct 2023 01:42:32 +0800 Subject: [PATCH] Synchronization code --- .../DbMethods/DefaultDbMethod.cs | 79 +++++++++++++++++++ .../ExpressionsToSql/DbMethods/IDbMethods.cs | 1 + .../ExpressionsToSql/DbMethods/SqlFunc.cs | 4 + .../ResolveItems/BaseResolve_Item.cs | 4 + .../MethodCallExpressionResolve.cs | 4 + .../MethodCallExpressionResolve_Helper.cs | 10 ++- 6 files changed, 101 insertions(+), 1 deletion(-) diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs index ed954c8df..ccbdc298f 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/DefaultDbMethod.cs @@ -900,6 +900,85 @@ namespace SqlSugar return result; } } + public string ListAll(MethodCallExpressionModel model) + { + if (IsArrayAnyParameter(model)) + { + return ListArrayAny(model); + } + StringBuilder sb = new StringBuilder(); + if (model.Args[0].MemberValue != null && (model.Args[0].MemberValue as IList).Count > 0) + { + sb.Append(" ( "); + var listPar = model.Args[1].MemberValue as ListAnyParameter; + foreach (var item in (model.Args[0].MemberValue as IList)) + { + var sql = listPar.Sql; + if (sb.Length > 3) + { + sb.Append("AND"); + } + foreach (var columnInfo in listPar.Columns) + { + var replace = listPar.ConvetColumnFunc($"{listPar.Name}.{columnInfo.DbColumnName}"); + if (sql.Contains(replace)) + { + var value = columnInfo.PropertyInfo.GetValue(item); + var newValue = "null"; + if (value != null) + { + if (UtilMethods.IsNumber(columnInfo.UnderType.Name)) + { + newValue = value.ToString(); + } + else if (columnInfo.UnderType == SqlSugar.UtilConstants.GuidType) + { + newValue = ToGuid(new MethodCallExpressionModel() + { + Args = new List() + { + new MethodCallExpressionArgs(){ + MemberValue=value.ToSqlValue(), + MemberName=value.ToSqlValue() + } + } + }); + } + else if (columnInfo.UnderType == SqlSugar.UtilConstants.DateType) + { + newValue = ToDate(new MethodCallExpressionModel() + { + Args = new List() + { + new MethodCallExpressionArgs(){ + MemberValue=UtilMethods.GetConvertValue( value).ToSqlValue(), + MemberName=UtilMethods.GetConvertValue( value).ToSqlValue() + } + } + }); + } + else + { + newValue = value.ToSqlValue(); + } + } + sql = sql.Replace(replace, newValue); + } + } + sb.Append(sql); + } + sb.Append(" ) "); + } + var result = sb.ToString(); + if (result.IsNullOrEmpty()) + { + return " 1=2 "; + } + else + { + return result; + } + } public virtual string GetTableWithDataBase(string dataBaseName,string tableName) { return $"{dataBaseName}.{tableName}"; diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs index 1a9dcef9d..254795a5a 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/IDbMethods.cs @@ -111,6 +111,7 @@ namespace SqlSugar string CompareTo(MethodCallExpressionModel model); string SplitIn(MethodCallExpressionModel model); string ListAny(MethodCallExpressionModel model); + string ListAll(MethodCallExpressionModel model); string GetTableWithDataBase(string databaseName,string tableName); string Modulo(MethodCallExpressionModel mode); string Like(MethodCallExpressionModel mode); diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs index cf912533b..2fded9d55 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/DbMethods/SqlFunc.cs @@ -385,5 +385,9 @@ namespace SqlSugar { throw new NotSupportedException("Can only be used in expressions"); } + public static bool ListAll(List listConstant, Expression> expression) + { + throw new NotSupportedException("Can only be used in expressions"); + } } } diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs index 23d129f82..6affff36f 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve_Item.cs @@ -103,6 +103,10 @@ namespace SqlSugar { parameter.CommonTempData = GetNewExpressionValue(item); } + else if (ExpressionTool.GetMethodName(item) == "All" && !ExpressionTool.GetTopLevelMethodCalls(item).Contains("Subqueryable")) + { + parameter.CommonTempData = GetNewExpressionValue(item); + } else { this.Start(); diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index c34d10256..b463eac84 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -168,6 +168,10 @@ namespace SqlSugar { name = "ListAny"; } + else if (name == "All" && ExpressionTool.IsVariable(express.Arguments[0])) + { + name = "ListAll"; + } var args = express.Arguments.Cast().ToList(); MethodCallExpressionModel model = new MethodCallExpressionModel(); model.Args = new List(); diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs index cd32e3559..137822be4 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs @@ -266,7 +266,7 @@ namespace SqlSugar } model.Args.Add(argItem); } - else if (name == "ListAny" && item is LambdaExpression) + else if (name.IsIn("ListAny","ListAll") && item is LambdaExpression) { var sql = GetNewExpressionValue(item, ResolveExpressType.WhereMultiple); var lamExp = (item as LambdaExpression); @@ -911,6 +911,10 @@ namespace SqlSugar this.Context.Result.IsNavicate = true; this.Context.Parameters.RemoveAll(it => model.Args[0].MemberName.ObjToString().Contains(it.ParameterName)); return this.Context.DbMehtods.ListAny(model); + case "ListAll": + this.Context.Result.IsNavicate = true; + this.Context.Parameters.RemoveAll(it => model.Args[0].MemberName.ObjToString().Contains(it.ParameterName)); + return this.Context.DbMehtods.ListAll(model); case "Modulo": return this.Context.DbMehtods.Modulo(model); case "Like": @@ -967,6 +971,10 @@ namespace SqlSugar { return true; } + if (expression.Method.Name == "All" && expression.Arguments.Count() > 0 && ExpressionTool.IsVariable(expression.Arguments[0])) + { + return true; + } if (expression.Method.Name == "Format" && expression.Method.DeclaringType == UtilConstants.StringType) { return true;