diff --git a/.vs/SqlSugar/v14/.suo b/.vs/SqlSugar/v14/.suo index 560311b05..7fdc2b475 100644 Binary files a/.vs/SqlSugar/v14/.suo and b/.vs/SqlSugar/v14/.suo differ diff --git a/OrmTest/bin/Debug/OrmTest.exe b/OrmTest/bin/Debug/OrmTest.exe index cffce9109..c5d9dd40c 100644 Binary files a/OrmTest/bin/Debug/OrmTest.exe and b/OrmTest/bin/Debug/OrmTest.exe differ diff --git a/OrmTest/bin/Debug/OrmTest.pdb b/OrmTest/bin/Debug/OrmTest.pdb index 2699ce0a8..420ab1fbb 100644 Binary files a/OrmTest/bin/Debug/OrmTest.pdb and b/OrmTest/bin/Debug/OrmTest.pdb differ diff --git a/OrmTest/bin/Debug/SqlSugar.dll b/OrmTest/bin/Debug/SqlSugar.dll index 88bd7299b..a34e7ab6b 100644 Binary files a/OrmTest/bin/Debug/SqlSugar.dll and b/OrmTest/bin/Debug/SqlSugar.dll differ diff --git a/OrmTest/bin/Debug/SqlSugar.pdb b/OrmTest/bin/Debug/SqlSugar.pdb index 21f0bcd3c..e94d0c007 100644 Binary files a/OrmTest/bin/Debug/SqlSugar.pdb and b/OrmTest/bin/Debug/SqlSugar.pdb differ diff --git a/OrmTest/obj/Debug/OrmTest.csprojResolveAssemblyReference.cache b/OrmTest/obj/Debug/OrmTest.csprojResolveAssemblyReference.cache index 92f841536..89d6d076c 100644 Binary files a/OrmTest/obj/Debug/OrmTest.csprojResolveAssemblyReference.cache and b/OrmTest/obj/Debug/OrmTest.csprojResolveAssemblyReference.cache differ diff --git a/OrmTest/obj/Debug/OrmTest.exe b/OrmTest/obj/Debug/OrmTest.exe index cffce9109..c5d9dd40c 100644 Binary files a/OrmTest/obj/Debug/OrmTest.exe and b/OrmTest/obj/Debug/OrmTest.exe differ diff --git a/OrmTest/obj/Debug/OrmTest.pdb b/OrmTest/obj/Debug/OrmTest.pdb index 2699ce0a8..420ab1fbb 100644 Binary files a/OrmTest/obj/Debug/OrmTest.pdb and b/OrmTest/obj/Debug/OrmTest.pdb differ diff --git a/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs b/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs index d8ac4450a..f73c58c5d 100644 --- a/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs +++ b/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs @@ -8,15 +8,14 @@ namespace SqlSugar { public class ExpressionParameter { - public Expression Expression { get; set; } public ExpressionContext Context { get; set; } - public bool? IsLeft { get; set; } - public Expression BaseExpression { get; set; } - public int Index { get; set; } - public List> BinaryExpressionInfoList { get; set; } - public object TempDate { get; set; } public ExpressionParameter BaseParameter { get; set; } - public int SwitchCaseNumber { get; set; } - public bool IsOnlyAddTempDate { get; set; } + public Expression BaseExpression { get; set; } + public Expression Expression { get; set; } + public bool? IsLeft { get; set; } + public int Index { get; set; } + public object CommonTempData { get; set; } + public List> BinaryTempData { get; set; } + public ExpressionResultAppendType AppendType { get; set; } } } diff --git a/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs b/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs index 17feacdb7..255ab7bcd 100644 --- a/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs +++ b/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs @@ -7,6 +7,7 @@ namespace SqlSugar { public class ExpressionResult { + public ExpressionParameter CurrentParameter { get; set; } #region constructor private ExpressionResult() { @@ -57,6 +58,10 @@ namespace SqlSugar public void Append(object parameter) { + if (this.CurrentParameter.IsValuable() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) { + this.CurrentParameter.CommonTempData = parameter; + return; + } switch (this._ResolveExpressType) { case ResolveExpressType.SelectSingle: @@ -79,6 +84,11 @@ namespace SqlSugar public void AppendFormat(string parameter, params object[] orgs) { + if (this.CurrentParameter.IsValuable() && this.CurrentParameter.AppendType.IsIn(ExpressionResultAppendType.AppendTempDate)) + { + this.CurrentParameter.CommonTempData = new KeyValuePair(parameter,orgs); + return; + } switch (this._ResolveExpressType) { case ResolveExpressType.SelectSingle: diff --git a/SqlSugar/ExpressionsToSql/Common/ExpressionResultAcceptType.cs b/SqlSugar/ExpressionsToSql/Common/ExpressionResultAcceptType.cs new file mode 100644 index 000000000..aee7ee4e9 --- /dev/null +++ b/SqlSugar/ExpressionsToSql/Common/ExpressionResultAcceptType.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public enum ExpressionResultAppendType + { + AppendResult=0, + AppendTempDate=1 + } +} diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index 25f0683d1..00385e83a 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -9,15 +9,17 @@ namespace SqlSugar { public BinaryExpressionResolve(ExpressionParameter parameter) : base(parameter) { - if (parameter.BaseParameter.TempDate != null && parameter.BaseParameter.TempDate.Equals("simple")) + if (parameter.BaseParameter.CommonTempData != null && parameter.BaseParameter.CommonTempData.Equals("simple")) { - parameter.IsOnlyAddTempDate = true; + parameter.BaseParameter = parameter; + parameter.AppendType = ExpressionResultAppendType.AppendTempDate; + this.Context.Result.CurrentParameter = parameter; new SimpleBinaryExpressionResolve(parameter); - parameter.IsOnlyAddTempDate = false; + this.Context.Result.CurrentParameter = null; } else { - parameter.BinaryExpressionInfoList = new List>(); + parameter.BinaryTempData = new List>(); var expression = this.Expression as BinaryExpression; var operatorValue = ExpressionTool.GetOperator(expression.NodeType); var isComparisonOperator = @@ -54,8 +56,8 @@ namespace SqlSugar private string GetRightString(ExpressionParameter parameter) { - var leftInfo = parameter.BinaryExpressionInfoList.Single(it => it.Value.IsLeft).Value; - var rightInfo = parameter.BinaryExpressionInfoList.Single(it => !it.Value.IsLeft).Value; + var leftInfo = parameter.BinaryTempData.Single(it => it.Value.IsLeft).Value; + var rightInfo = parameter.BinaryTempData.Single(it => !it.Value.IsLeft).Value; if (rightInfo.ExpressionType == ExpressionConst.ConstantExpressionType) { var sqlParameterKeyWord = parameter.Context.SqlParameterKeyWord; @@ -71,8 +73,8 @@ namespace SqlSugar private string GetLeftString(ExpressionParameter parameter) { - var leftInfo = parameter.BinaryExpressionInfoList.Single(it => it.Value.IsLeft).Value; - var rightInfo = parameter.BinaryExpressionInfoList.Single(it => !it.Value.IsLeft).Value; + var leftInfo = parameter.BinaryTempData.Single(it => it.Value.IsLeft).Value; + var rightInfo = parameter.BinaryTempData.Single(it => !it.Value.IsLeft).Value; if (leftInfo.ExpressionType == ExpressionConst.ConstantExpressionType) { var sqlParameterKeyWord = parameter.Context.SqlParameterKeyWord; diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs index a5ce3bdc7..cb697a10e 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs @@ -17,16 +17,16 @@ namespace SqlSugar { case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectMultiple: - parameter.BaseParameter.TempDate = value; + parameter.BaseParameter.CommonTempData = value; break; case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereMultiple: case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldMultiple: default: - if (parameter.BaseParameter.BinaryExpressionInfoList != null) + if (parameter.BaseParameter.BinaryTempData != null) { - parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() + parameter.BaseParameter.BinaryTempData.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() { IsLeft = Convert.ToBoolean(isLeft), Value = value, diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs index 684c2cef4..09817c133 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberConstExpressionResolve.cs @@ -18,16 +18,16 @@ namespace SqlSugar { case ResolveExpressType.SelectSingle: case ResolveExpressType.SelectMultiple: - parameter.BaseParameter.TempDate = value; + parameter.BaseParameter.CommonTempData = value; break; case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereMultiple: case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldMultiple: default: - if (parameter.BaseParameter.BinaryExpressionInfoList != null) + if (parameter.BaseParameter.BinaryTempData != null) { - parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() + parameter.BaseParameter.BinaryTempData.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() { IsLeft = Convert.ToBoolean(isLeft), Value = value, diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index 2a3c32045..6609fe430 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -7,6 +7,7 @@ namespace SqlSugar { public class MemberExpressionResolve : BaseResolve { + public ExpressionParameter Parameter { get; set; } public MemberExpressionResolve(ExpressionParameter parameter) : base(parameter) { var expression = base.Expression as MemberExpression; @@ -48,8 +49,8 @@ namespace SqlSugar string shortName = expression.Expression.ToString(); string fieldName = expression.Member.Name; fieldName = shortName + "." + fieldName; - if (parameter.BaseParameter.BinaryExpressionInfoList != null) - parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() + if (parameter.BaseParameter.BinaryTempData != null) + parameter.BaseParameter.BinaryTempData.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() { IsLeft = Convert.ToBoolean(isLeft), Value = fieldName, @@ -61,8 +62,8 @@ namespace SqlSugar private string getSingleName(ExpressionParameter parameter, MemberExpression expression, bool? isLeft) { string fieldName = expression.Member.Name; - if (parameter.BaseParameter.BinaryExpressionInfoList != null) - parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() + if (parameter.BaseParameter.BinaryTempData != null) + parameter.BaseParameter.BinaryTempData.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() { IsLeft = Convert.ToBoolean(isLeft), Value = fieldName, diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 0969a31aa..989d4ab93 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -51,7 +51,7 @@ namespace SqlSugar base.Start(); string parameterName = this.Context.SqlParameterKeyWord + "constant" + i; parameter.Context.Result.Append(parameterName); - this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.TempDate)); + this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); } else if (item is MemberExpression) { diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberNewExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberNewExpressionResolve.cs index d0a97cb50..80bfc9210 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberNewExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberNewExpressionResolve.cs @@ -14,9 +14,9 @@ namespace SqlSugar var isLeft = parameter.IsLeft; object value = null; value = ExpressionTool.DynamicInvoke(expression); - if (parameter.BaseParameter.BinaryExpressionInfoList != null) + if (parameter.BaseParameter.BinaryTempData != null) { - parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() + parameter.BaseParameter.BinaryTempData.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() { IsLeft = Convert.ToBoolean(isLeft), Value = value, diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs index 76a16aa8c..72d799561 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberNoExpressionResolve.cs @@ -23,9 +23,9 @@ namespace SqlSugar { value = ExpressionTool.GetPropertyValue(expression); } - if (parameter.BaseParameter.BinaryExpressionInfoList != null) + if (parameter.BaseParameter.BinaryTempData != null) { - parameter.BaseParameter.BinaryExpressionInfoList.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() + parameter.BaseParameter.BinaryTempData.Add(new KeyValuePair(ExpressionConst.BinaryExpressionInfoListKey, new BinaryExpressionInfo() { IsLeft = Convert.ToBoolean(isLeft), Value = value, diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs index d559e428d..69a49946a 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs @@ -47,7 +47,7 @@ namespace SqlSugar base.Start(); string parameterName = this.Context.SqlParameterKeyWord + "constant" + i; parameter.Context.Result.Append(parameterName); - this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.TempDate)); + this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.CommonTempData)); } else if (item is MemberExpression) { @@ -57,9 +57,9 @@ namespace SqlSugar else if (item is BinaryExpression) { base.Expression = item; - parameter.TempDate = "simple"; + parameter.CommonTempData = "simple"; base.Start(); - parameter.TempDate =null; + parameter.CommonTempData =null; } else { diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs index 1a60b0959..eaa2dcae5 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs @@ -18,10 +18,13 @@ namespace SqlSugar base.Expression = expression.Right; base.Start(); - var rightValue = parameter.TempDate; + var rightValue = parameter.CommonTempData; base.Expression = expression.Left; base.Start(); - var leftValue = parameter.TempDate; + var leftValue = parameter.CommonTempData; + var operatorValue = ExpressionTool.GetOperator(expression.NodeType); + this.Context.Result.CurrentParameter = null; + this.Context.Result.AppendFormat(ExpressionConst.BinaryFormatString, leftValue, operatorValue, rightValue); break; case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereMultiple: diff --git a/SqlSugar/SqlSugar.csproj b/SqlSugar/SqlSugar.csproj index 60b58fc46..b05941f6f 100644 --- a/SqlSugar/SqlSugar.csproj +++ b/SqlSugar/SqlSugar.csproj @@ -100,6 +100,7 @@ + diff --git a/SqlSugar/bin/Debug/SqlSugar.dll b/SqlSugar/bin/Debug/SqlSugar.dll index 88bd7299b..a34e7ab6b 100644 Binary files a/SqlSugar/bin/Debug/SqlSugar.dll and b/SqlSugar/bin/Debug/SqlSugar.dll differ diff --git a/SqlSugar/bin/Debug/SqlSugar.pdb b/SqlSugar/bin/Debug/SqlSugar.pdb index 21f0bcd3c..e94d0c007 100644 Binary files a/SqlSugar/bin/Debug/SqlSugar.pdb and b/SqlSugar/bin/Debug/SqlSugar.pdb differ diff --git a/SqlSugar/obj/Debug/SqlSugar.csproj.FileListAbsolute.txt b/SqlSugar/obj/Debug/SqlSugar.csproj.FileListAbsolute.txt index 9a47395a4..c7414cb31 100644 --- a/SqlSugar/obj/Debug/SqlSugar.csproj.FileListAbsolute.txt +++ b/SqlSugar/obj/Debug/SqlSugar.csproj.FileListAbsolute.txt @@ -3,4 +3,3 @@ F:\MyOpenSource\SqlSugar4.XNew\SqlSugar\SqlSugar\bin\Debug\SqlSugar.pdb F:\MyOpenSource\SqlSugar4.XNew\SqlSugar\SqlSugar\bin\Debug\Newtonsoft.Json.dll F:\MyOpenSource\SqlSugar4.XNew\SqlSugar\SqlSugar\obj\Debug\SqlSugar.dll F:\MyOpenSource\SqlSugar4.XNew\SqlSugar\SqlSugar\obj\Debug\SqlSugar.pdb -F:\MyOpenSource\SqlSugar4.XNew\SqlSugar\SqlSugar\obj\Debug\SqlSugar.csprojResolveAssemblyReference.cache diff --git a/SqlSugar/obj/Debug/SqlSugar.csprojResolveAssemblyReference.cache b/SqlSugar/obj/Debug/SqlSugar.csprojResolveAssemblyReference.cache deleted file mode 100644 index cf78a08b2..000000000 Binary files a/SqlSugar/obj/Debug/SqlSugar.csprojResolveAssemblyReference.cache and /dev/null differ diff --git a/SqlSugar/obj/Debug/SqlSugar.dll b/SqlSugar/obj/Debug/SqlSugar.dll index 88bd7299b..a34e7ab6b 100644 Binary files a/SqlSugar/obj/Debug/SqlSugar.dll and b/SqlSugar/obj/Debug/SqlSugar.dll differ diff --git a/SqlSugar/obj/Debug/SqlSugar.pdb b/SqlSugar/obj/Debug/SqlSugar.pdb index 21f0bcd3c..e94d0c007 100644 Binary files a/SqlSugar/obj/Debug/SqlSugar.pdb and b/SqlSugar/obj/Debug/SqlSugar.pdb differ