From 6f3dd0528e32b1aca328803bae67e0c4cfea0856 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 15 Apr 2019 17:33:33 +0800 Subject: [PATCH] Update Expression To Sql --- Src/Asp.Net/SqlServerTest/Demos/1_Query.cs | 2 +- .../MethodCallExpressionResolve.cs | 23 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index 3ff59f3e7..d3dd90555 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -446,7 +446,7 @@ namespace OrmTest.Demo x =p }).ToList(); var test46 = db.Queryable().Where(it => it.CreateTime > SqlFunc.ToDate(DateTime.Now.Date)).ToList(); - //var test47 = db.Queryable().Where(it =>string.IsNullOrEmpty(it.Name)==true).ToList(); + var test47 = db.Queryable().Where(it =>string.IsNullOrEmpty(it.Name)==true).ToList(); } public static void Page() { diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index dfb4abde2..09a8a31d3 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -249,12 +249,13 @@ namespace SqlSugar model.Args.AddRange(appendArgs); } var methodValue = GetMethodValue(name, model); - if (parameter.BaseExpression is BinaryExpression && parameter.OppsiteExpression.Type == UtilConstants.BoolType&&name=="HasValue"&&!(parameter.OppsiteExpression is BinaryExpression)&& !(parameter.OppsiteExpression is MethodCallExpression && parameter.OppsiteExpression.Type == UtilConstants.BoolType)) { - methodValue = this.Context.DbMehtods.CaseWhen(new List>() { - new KeyValuePair("IF",methodValue.ObjToString()), - new KeyValuePair("Return","1"), - new KeyValuePair("End","0") - }); + if (parameter.BaseExpression is BinaryExpression && parameter.OppsiteExpression.Type == UtilConstants.BoolType&&name=="HasValue"&&!(parameter.OppsiteExpression is BinaryExpression)&& !(parameter.OppsiteExpression is MethodCallExpression && parameter.OppsiteExpression.Type == UtilConstants.BoolType)) + { + methodValue = packIfElse(methodValue); + } + if (parameter.OppsiteExpression != null&&name == "IsNullOrEmpty" && parameter.OppsiteExpression.Type == UtilConstants.BoolType&& parameter.OppsiteExpression is ConstantExpression) + { + methodValue = packIfElse(methodValue); } var isRoot = contextIndex == 2; if (isRoot && parameter.BaseExpression == null &&this.Context.ResolveType.IsIn(ResolveExpressType.WhereMultiple,ResolveExpressType.WhereSingle)&& (parameter.CurrentExpression is MethodCallExpression) && ((parameter.CurrentExpression as MethodCallExpression).Method.Name.IsIn("ToBool", "ToBoolean"))) @@ -284,6 +285,16 @@ namespace SqlSugar base.AppendValue(parameter, isLeft, methodValue); } + private object packIfElse(object methodValue) + { + methodValue = this.Context.DbMehtods.CaseWhen(new List>() { + new KeyValuePair("IF",methodValue.ObjToString()), + new KeyValuePair("Return","1"), + new KeyValuePair("End","0") + }); + return methodValue; + } + private void AppendItem(ExpressionParameter parameter, string name, IEnumerable args, MethodCallExpressionModel model, Expression item) { var isBinaryExpression = item is BinaryExpression || item is MethodCallExpression;