From 82c3833e4cd03dd683dd373bdbfd86d10a567b41 Mon Sep 17 00:00:00 2001 From: sunkaixuna <610262374@qq.com> Date: Sat, 25 Dec 2021 17:00:28 +0800 Subject: [PATCH] update exp to sql --- .../SqlServerTest/UnitTest/UQueryable.cs | 3 +++ .../MethodCallExpressionResolve.cs | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UQueryable.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UQueryable.cs index 4881056e2..444fa436f 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UQueryable.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UQueryable.cs @@ -213,6 +213,9 @@ namespace OrmTest var d111111111 = db.Queryable() .Where(it => it.Id == (it.Id > 0 ? (it.Id == 1 ? 11 : (it.Id==2?2:1)) : 2)) .ToList(); + bool? bq = true; + var d1111111111 = db.Queryable().Where(it => it.a.Equals(bq.Value)).ToArray(); + var d11111111111 = db.Queryable().Where(it => SqlFunc.IIF(bq.Value,1,2)==1).ToArray(); } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index 44ef75b4a..5569d127d 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -428,6 +428,7 @@ namespace SqlSugar var isIFFBoolBinary = isIIF && (item is BinaryExpression) && (item as BinaryExpression).Type == UtilConstants.BoolType; var isIFFBoolMethod = isIIF && (item is MethodCallExpression) && (item as MethodCallExpression).Type == UtilConstants.BoolType; var isFirst = item == args.First(); + var isBoolValue = item.Type == UtilConstants.BoolType && item.ToString().StartsWith("value("); if (isFirst && isIIF && isConst) { var value = (item as ConstantExpression).Value.ObjToBool() ? this.Context.DbMehtods.True() : this.Context.DbMehtods.False(); @@ -461,10 +462,26 @@ namespace SqlSugar { model.Args.Add(GetMethodCallArgs(parameter, item)); } - else if (isSubIIF) + else if (isSubIIF) { model.Args.Add(GetMethodCallArgs(parameter, item)); } + else if (isBoolValue&&!isIIF&& item is MemberExpression) + { + model.Args.Add(GetMethodCallArgs(parameter, (item as MemberExpression).Expression)); + } + else if (isBoolValue && isIIF && item is MemberExpression) + { + var argItem = GetMethodCallArgs(parameter, (item as MemberExpression).Expression); + if (argItem.IsMember) + { + var pName = this.Context.SqlParameterKeyWord + "true_0"; + if(!this.Context.Parameters.Any(it=>it.ParameterName== pName)) + this.Context.Parameters.Add(new SugarParameter(pName, true)); + argItem.MemberName = $" {argItem.MemberName}={pName} "; + } + model.Args.Add(argItem); + } else { AppendModel(parameter, model, item);