From 2ad142dc5e501962824eb528fb892ea107cd2e81 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 20 Dec 2022 21:03:06 +0800 Subject: [PATCH] Update exp to sql --- .../ResolveItems/BinaryExpressionResolve.cs | 2 +- .../ResolveItems/ConditionalExpressionResolve.cs | 2 +- .../ResolveItems/MethodCallExpressionResolve.cs | 4 ++-- .../MethodCallExpressionResolve_Helper.cs | 2 +- .../SqlSugar/Utilities/ExpressionBuilderHelper.cs | 13 +++++++++++++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs index 7063983be..f56201744 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/BinaryExpressionResolve.cs @@ -127,7 +127,7 @@ namespace SqlSugar if (RightIsHasValue(leftExpression, rightExpression,ExpressionTool.IsLogicOperator(expression))) { Expression trueValue = Expression.Constant(true); - rightExpression = ExpressionBuilderHelper.CreateExpression(rightExpression, trueValue, ExpressionType.And); + rightExpression = ExpressionBuilderHelper.CreateExpression(rightExpression, trueValue, ExpressionType.Equal); } var leftIsBinary = leftExpression is BinaryExpression; var rightBinary = rightExpression is BinaryExpression; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs index 7a335c71f..249c69ae5 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConditionalExpressionResolve.cs @@ -20,7 +20,7 @@ namespace SqlSugar if (IsBoolMember(express)) { Expression trueValue = Expression.Constant(true); - args[0]= ExpressionBuilderHelper.CreateExpression(express.Test, trueValue, ExpressionType.And); + args[0]= ExpressionBuilderHelper.CreateExpression(express.Test, trueValue, ExpressionType.Equal); } var isLeft = parameter.IsLeft; MethodCallExpressionModel model = new MethodCallExpressionModel(); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index 269890aaf..3f9309237 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -222,11 +222,11 @@ namespace SqlSugar if (name == "IIF" && item == args.First() && item is MemberExpression) { Expression trueValue = Expression.Constant(true); - var newItem = ExpressionBuilderHelper.CreateExpression(item, trueValue, ExpressionType.And); + var newItem = ExpressionBuilderHelper.CreateExpression(item, trueValue, ExpressionType.Equal); var member = (item as MemberExpression); if (member.Member.Name == "HasValue") { - newItem = ExpressionBuilderHelper.CreateExpression(member.Expression, Expression.Constant(null), ExpressionType.And); + newItem = ExpressionBuilderHelper.CreateExpression(member.Expression, Expression.Constant(null), ExpressionType.Equal); } AppendItem(parameter, name, new List() { newItem}, model, newItem); } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs index bc9b1daee..23423fa5f 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs @@ -780,7 +780,7 @@ namespace SqlSugar private bool IsContainsArray(MethodCallExpression express, string methodName, bool isValidNativeMethod) { - return !isValidNativeMethod && express.Method.DeclaringType.Namespace.IsIn("System.Linq", "System.Collections.Generic") && methodName == "Contains"; + return !isValidNativeMethod && express.Method.DeclaringType.Namespace.IsIn("System.Collections", "System.Linq", "System.Collections.Generic") && methodName == "Contains"; } private bool IsSubMethod(MethodCallExpression express, string methodName) { diff --git a/Src/Asp.Net/SqlSugar/Utilities/ExpressionBuilderHelper.cs b/Src/Asp.Net/SqlSugar/Utilities/ExpressionBuilderHelper.cs index f375425ef..0eee3b073 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/ExpressionBuilderHelper.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/ExpressionBuilderHelper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -49,6 +50,18 @@ namespace SqlSugar return Expression.Equal(left, Expression.Convert(value, left.Type)); } } + public static Expression CreateExpressionLike(Type entityType,string propertyName,List list) + { + var parameter = Expression.Parameter(entityType, "p"); + MemberExpression memberProperty = Expression.PropertyOrField(parameter, propertyName); + MethodInfo method = typeof(List<>).MakeGenericType(typeof(ColumnType)).GetMethod("Contains"); + ConstantExpression constantCollection = Expression.Constant(list); + + MethodCallExpression methodCall = Expression.Call(constantCollection, method, memberProperty); + + var expression = Expression.Lambda(methodCall, parameter); + return expression; + } public static Expression> CreateNewFields(EntityInfo entity,List propertyNames) { Type sourceType = typeof(T);