From 0aac410c8f87e45e9915a1b309d4175bca7bbb7d Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 6 Feb 2019 21:15:48 +0800 Subject: [PATCH] Update exp to sql --- Src/Asp.Net/SqlServerTest/Demos/1_Query.cs | 7 +++ .../ResolveItems/MemberExpressionResolve.cs | 53 ++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index c0cb6c90f..a5c8022c9 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -399,6 +399,13 @@ namespace OrmTest.Demo var test12 = db.Queryable().Distinct().Select(it=>new Student{ Name=it.Name }).ToList(); var test13 = db.Queryable().Where(it=>DateTime.Parse("2014-1-1")==DateTime.Now).Where(it => Boolean.Parse("true") ==true).ToList(); var test14 = db.Queryable().Where(it =>Convert.ToBoolean(it.Bool1)).ToList(); + var test15 = db.Queryable().Where(it => it.Bool2.Value&&it.Bool1).ToList(); + var test16 = db.Queryable().Where(it => !it.Bool2.Value && !it.Bool1).ToList(); + var test17 = db.Queryable().Where(it => it.Bool1 && it.Bool1).ToList(); + var test18 = db.Queryable().Where(it => it.SchoolId.HasValue&&it.SchoolId.HasValue).ToList(); + var test19 = db.Queryable().Where(it => it.SchoolId.HasValue && it.SchoolId.HasValue&&it.SchoolId.HasValue).ToList(); + var test20 = db.Queryable().Where(it => it.SchoolId.HasValue && SqlFunc.IsNullOrEmpty(it.Name)).ToList(); + //var test24 = db.Queryable().Where(it => !it.SchoolId.HasValue && it.SchoolId.HasValue).ToList(); } public static void Page() { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs index c3e478804..261232a97 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MemberExpressionResolve.cs @@ -100,6 +100,37 @@ namespace SqlSugar #endregion #region Resolve Where + private void ResolveBoolLogic(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle) + { + string fieldName = string.Empty; + if (isSetTempData) + { + if (ExpressionTool.IsConstExpression(expression)) + { + var value = ExpressionTool.GetMemberValue(expression.Member, expression); + baseParameter.CommonTempData = value+"=1 "; + } + else + { + fieldName = GetName(parameter, expression, null, isSingle); + baseParameter.CommonTempData = fieldName+"=1 "; + } + } + else + { + if (ExpressionTool.IsConstExpression(expression)) + { + var value = ExpressionTool.GetMemberValue(expression.Member, expression); + base.AppendValue(parameter, isLeft, value+"=1 "); + } + else + { + fieldName = GetName(parameter, expression, isLeft, isSingle); + AppendMember(parameter, isLeft, fieldName+"=1 "); + } + } + } + private void ResolveWhereLogic(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle) { string fieldName = string.Empty; @@ -137,7 +168,14 @@ namespace SqlSugar { expression = expression.Expression as MemberExpression; baseParameter.ChildExpression = expression; - ResolveWhereLogic(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle); + if (UtilMethods.GetUnderType(expression.Type) == UtilConstants.BoolType&¶meter.BaseExpression!=null&&ExpressionTool.IsLogicOperator(parameter.BaseExpression)) + { + ResolveBoolLogic(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle); + } + else + { + ResolveWhereLogic(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle); + } return expression; } @@ -248,7 +286,18 @@ namespace SqlSugar methodParamter } }); - this.Context.Result.Append(result); + if (parameter.BaseExpression != null && ExpressionTool.IsLogicOperator(parameter.BaseExpression) && parameter.IsLeft == true) + { + if (base.Context.Result.Contains(ExpressionConst.FormatSymbol)) + { + base.Context.Result.Replace(ExpressionConst.FormatSymbol, ""); + } + this.Context.Result.Append(result+" "+ExpressionTool.GetOperator(parameter.BaseExpression.NodeType)+" "); + } + else + { + this.Context.Result.Append(result); + } parameter.CommonTempData = null; }