diff --git a/.vs/SqlSugar/v14/.suo b/.vs/SqlSugar/v14/.suo index 24b996261..560311b05 100644 Binary files a/.vs/SqlSugar/v14/.suo and b/.vs/SqlSugar/v14/.suo differ diff --git a/OrmTest/ExpressionTest/Select.cs b/OrmTest/ExpressionTest/Select.cs index 104822d88..318374ac3 100644 --- a/OrmTest/ExpressionTest/Select.cs +++ b/OrmTest/ExpressionTest/Select.cs @@ -36,7 +36,7 @@ namespace OrmTest.ExpressionTest } private static void MultipleDynamic() { - Expression> exp = (it, school) => new{ Name = "a", Id = it.Id, SchoolId = school.Id }; + Expression> exp = (it, school) => new{ Name = "a", Id = it.Id/2, SchoolId = school.Id }; ExpressionContext expContext = new ExpressionContext(exp, ResolveExpressType.SelectMultiple); expContext.Resolve(); var selectorValue = expContext.Result.GetString(); diff --git a/OrmTest/bin/Debug/OrmTest.exe b/OrmTest/bin/Debug/OrmTest.exe index 6149d5df3..cffce9109 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 f3d690d70..2699ce0a8 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 570cccd93..88bd7299b 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 f4535804c..21f0bcd3c 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 6c9009547..92f841536 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 6149d5df3..cffce9109 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 f3d690d70..2699ce0a8 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 be0e4f5df..d8ac4450a 100644 --- a/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs +++ b/SqlSugar/ExpressionsToSql/Common/ExpressionParameter.cs @@ -17,5 +17,6 @@ namespace SqlSugar public object TempDate { get; set; } public ExpressionParameter BaseParameter { get; set; } public int SwitchCaseNumber { get; set; } + public bool IsOnlyAddTempDate { get; set; } } } diff --git a/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs b/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs index f8ac45b84..17feacdb7 100644 --- a/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs +++ b/SqlSugar/ExpressionsToSql/Common/ExpressionResult.cs @@ -81,14 +81,14 @@ namespace SqlSugar { switch (this._ResolveExpressType) { + case ResolveExpressType.SelectSingle: + case ResolveExpressType.SelectMultiple: + parameter = parameter + ","; + break; case ResolveExpressType.WhereSingle: break; case ResolveExpressType.WhereMultiple: break; - case ResolveExpressType.SelectSingle: - break; - case ResolveExpressType.SelectMultiple: - break; case ResolveExpressType.FieldSingle: break; case ResolveExpressType.FieldMultiple: diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index 9ee76bda8..25f0683d1 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -9,37 +9,46 @@ namespace SqlSugar { public BinaryExpressionResolve(ExpressionParameter parameter) : base(parameter) { - parameter.BinaryExpressionInfoList =new List>(); - var expression = this.Expression as BinaryExpression; - var operatorValue = ExpressionTool.GetOperator(expression.NodeType); - var isComparisonOperator = - expression.NodeType != ExpressionType.And && - expression.NodeType != ExpressionType.AndAlso && - expression.NodeType != ExpressionType.Or && - expression.NodeType != ExpressionType.OrElse; - base.BaseExpression = expression; - base.IsLeft = true; - base.Expression = expression.Left; - base.Start(); - base.IsLeft = false; - base.Expression = expression.Right; - base.Start(); - base.IsLeft = null; - string leftString = GetLeftString(parameter); - string rightString = GetRightString(parameter); - string binarySql =string.Format(ExpressionConst.BinaryFormatString,leftString,operatorValue,rightString); - string sqlWhereString = base.Context.Result.GetResultString(); - if (sqlWhereString.Contains(ExpressionConst.Format0)) + if (parameter.BaseParameter.TempDate != null && parameter.BaseParameter.TempDate.Equals("simple")) { - base.Context.Result.Replace(ExpressionConst.Format0, binarySql); + parameter.IsOnlyAddTempDate = true; + new SimpleBinaryExpressionResolve(parameter); + parameter.IsOnlyAddTempDate = false; } else { - base.Context.Result.Append(binarySql); - } - if (sqlWhereString.Contains(ExpressionConst.Format1)) - { - base.Context.Result.Replace(ExpressionConst.Format1, ExpressionConst.Format0); + parameter.BinaryExpressionInfoList = new List>(); + var expression = this.Expression as BinaryExpression; + var operatorValue = ExpressionTool.GetOperator(expression.NodeType); + var isComparisonOperator = + expression.NodeType != ExpressionType.And && + expression.NodeType != ExpressionType.AndAlso && + expression.NodeType != ExpressionType.Or && + expression.NodeType != ExpressionType.OrElse; + base.BaseExpression = expression; + base.IsLeft = true; + base.Expression = expression.Left; + base.Start(); + base.IsLeft = false; + base.Expression = expression.Right; + base.Start(); + base.IsLeft = null; + string leftString = GetLeftString(parameter); + string rightString = GetRightString(parameter); + string binarySql = string.Format(ExpressionConst.BinaryFormatString, leftString, operatorValue, rightString); + string sqlWhereString = base.Context.Result.GetResultString(); + if (sqlWhereString.Contains(ExpressionConst.Format0)) + { + base.Context.Result.Replace(ExpressionConst.Format0, binarySql); + } + else + { + base.Context.Result.Append(binarySql); + } + if (sqlWhereString.Contains(ExpressionConst.Format1)) + { + base.Context.Result.Replace(ExpressionConst.Format1, ExpressionConst.Format0); + } } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index 20bd5a95a..0969a31aa 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -53,11 +53,14 @@ namespace SqlSugar parameter.Context.Result.Append(parameterName); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.TempDate)); } - else if(item is MemberExpression) + else if (item is MemberExpression) { - base.Expression= memberAssignment.Expression; + base.Expression = memberAssignment.Expression; base.Start(); } + else { + Check.ThrowNotSupportedException(item.GetType().Name); + } } } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs index 4daa4f0e3..d559e428d 100644 --- a/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs +++ b/SqlSugar/ExpressionsToSql/ResolveItems/NewExpressionResolve.cs @@ -49,19 +49,21 @@ namespace SqlSugar parameter.Context.Result.Append(parameterName); this.Context.Parameters.Add(new SugarParameter(parameterName, parameter.TempDate)); } + else if (item is MemberExpression) + { + base.Expression = item; + base.Start(); + } + else if (item is BinaryExpression) + { + base.Expression = item; + parameter.TempDate = "simple"; + base.Start(); + parameter.TempDate =null; + } else { - var memberExpression = (MemberExpression)item; - var fieldNme = (memberExpression).Member.Name; - if (isSingle) - { - parameter.Context.Result.Append(fieldNme); - } - else - { - var shortName = memberExpression.Expression.ToString(); - parameter.Context.Result.Append(shortName + "." + fieldNme); - } + Check.ThrowNotSupportedException(item.GetType().Name); } } } diff --git a/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs b/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs new file mode 100644 index 000000000..1a60b0959 --- /dev/null +++ b/SqlSugar/ExpressionsToSql/ResolveItems/SimpleBinaryExpressionResolve.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Linq.Expressions; +namespace SqlSugar +{ + public class SimpleBinaryExpressionResolve : BaseResolve + { + public SimpleBinaryExpressionResolve(ExpressionParameter parameter) : base(parameter) + { + var expression = base.Expression as BinaryExpression; + switch (parameter.Context.ResolveType) + { + case ResolveExpressType.SelectSingle: + case ResolveExpressType.SelectMultiple: + + base.Expression = expression.Right; + base.Start(); + var rightValue = parameter.TempDate; + base.Expression = expression.Left; + base.Start(); + var leftValue = parameter.TempDate; + break; + case ResolveExpressType.WhereSingle: + case ResolveExpressType.WhereMultiple: + case ResolveExpressType.FieldSingle: + case ResolveExpressType.FieldMultiple: + default: + + break; + } + } + } +} diff --git a/SqlSugar/SqlSugar.csproj b/SqlSugar/SqlSugar.csproj index d859238d6..60b58fc46 100644 --- a/SqlSugar/SqlSugar.csproj +++ b/SqlSugar/SqlSugar.csproj @@ -126,6 +126,7 @@ + diff --git a/SqlSugar/bin/Debug/SqlSugar.dll b/SqlSugar/bin/Debug/SqlSugar.dll index 570cccd93..88bd7299b 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 f4535804c..21f0bcd3c 100644 Binary files a/SqlSugar/bin/Debug/SqlSugar.pdb and b/SqlSugar/bin/Debug/SqlSugar.pdb differ diff --git a/SqlSugar/obj/Debug/SqlSugar.dll b/SqlSugar/obj/Debug/SqlSugar.dll index 570cccd93..88bd7299b 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 f4535804c..21f0bcd3c 100644 Binary files a/SqlSugar/obj/Debug/SqlSugar.pdb and b/SqlSugar/obj/Debug/SqlSugar.pdb differ