From 84b17cd3a8f707a8063ec4a5a184db1da19c889d Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 27 Apr 2019 15:14:59 +0800 Subject: [PATCH] Update exp to sql --- Src/Asp.Net/SqlServerTest/Demos/1_Query.cs | 3 +- .../ResolveItems/BaseResolve.cs | 40 ++++++++++++++++--- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index f60a6c168..2a9b888a4 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -458,7 +458,8 @@ namespace OrmTest.Demo isAny = SqlFunc.Subqueryable().Any()?1:2 }).ToList(); var test56= db.Queryable().Select(it=> new { - isAny=SqlFunc.Subqueryable().Any() + isAny=SqlFunc.Subqueryable().Any(), + isAny2 = SqlFunc.Subqueryable().Where(s=>false).Any() }).ToList(); } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 34b8effe0..cdb8323c1 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -342,7 +342,7 @@ namespace SqlSugar { var expression = ((UnaryExpression)item).Operand as MemberExpression; var isDateTimeNow = ((UnaryExpression)item).Operand.ToString() == "DateTime.Now"; - if (expression.Expression == null&&!isDateTimeNow) + if (expression.Expression == null && !isDateTimeNow) { this.Context.Result.CurrentParameter = parameter; this.Context.Result.IsLockCurrentParameter = true; @@ -353,7 +353,7 @@ namespace SqlSugar this.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString())); this.Context.Result.CurrentParameter = null; } - else if (expression.Expression is ConstantExpression||isDateTimeNow) + else if (expression.Expression is ConstantExpression || isDateTimeNow) { string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex; this.Context.ParameterIndex++; @@ -400,7 +400,8 @@ namespace SqlSugar } this.Context.Result.Append(this.Context.GetAsString(asName, newContext.Result.GetString())); this.Context.Result.CurrentParameter = null; - if (this.Context.SingleTableNameSubqueryShortName.IsNullOrEmpty() && newContext.SingleTableNameSubqueryShortName.HasValue()) { + if (this.Context.SingleTableNameSubqueryShortName.IsNullOrEmpty() && newContext.SingleTableNameSubqueryShortName.HasValue()) + { this.Context.SingleTableNameSubqueryShortName = newContext.SingleTableNameSubqueryShortName; } } @@ -427,7 +428,8 @@ namespace SqlSugar var propertyName = property.Name; var dbColumnName = propertyName; var mappingInfo = this.Context.MappingColumns.FirstOrDefault(it => it.EntityName == item.Type.Name && it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase)); - if (mappingInfo.HasValue()) { + if (mappingInfo.HasValue()) + { dbColumnName = mappingInfo.DbColumnName; } asName = this.Context.GetTranslationText(item.Type.Name + "." + propertyName); @@ -442,7 +444,30 @@ namespace SqlSugar } } } - else if (item is MethodCallExpression|| item is UnaryExpression||item is ConditionalExpression|| item.NodeType==ExpressionType.Coalesce) + else if (item.Type == UtilConstants.BoolType && item is MethodCallExpression && (item as MethodCallExpression).Method.Name == "Any"&&IsSubMethod(item as MethodCallExpression)) + { + this.Expression = item; + this.Start(); + var sql= this.Context.DbMehtods.IIF(new MethodCallExpressionModel() + { + Args=new List() { + new MethodCallExpressionArgs() { + IsMember=true, + MemberName=parameter.CommonTempData.ObjToString() + }, + new MethodCallExpressionArgs() { + IsMember=true, + MemberName=1 + }, + new MethodCallExpressionArgs() { + IsMember=true, + MemberName=0 + } + } + }); + parameter.Context.Result.Append(this.Context.GetAsString(asName, sql)); + } + else if (item is MethodCallExpression || item is UnaryExpression || item is ConditionalExpression || item.NodeType == ExpressionType.Coalesce) { this.Expression = item; this.Start(); @@ -453,6 +478,11 @@ namespace SqlSugar Check.ThrowNotSupportedException(item.GetType().Name); } } + + protected bool IsSubMethod(MethodCallExpression express) + { + return SubTools.SubItemsConst.Any(it => express.Object != null && express.Object.Type.Name == "Subqueryable`1"); + } protected static Dictionary MethodMapping = new Dictionary() { { "ToString","ToString"}, { "ToInt32","ToInt32"},