diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs index 08044758c..ec58e1ccc 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve_Helper.cs @@ -156,7 +156,7 @@ namespace SqlSugar }; model.Args.Add(methodCallExpressionArgs); } - else if (isFirst && isIIF && isIFFBoolMember&& (item as MemberExpression)?.Member?.Name=="HasValue") + else if (isFirst && isIIF && isIFFBoolMember && (item as MemberExpression)?.Member?.Name == "HasValue") { var value = base.GetNewExpressionValue(item); var methodCallExpressionArgs = new MethodCallExpressionArgs() @@ -167,9 +167,9 @@ namespace SqlSugar }; model.Args.Add(methodCallExpressionArgs); } - else if (name!=null && name != "MappingColumn" && !name.StartsWith("Row") &&ExpressionTool.GetMethodName(item)== "Format" && ExpressionTool.GetParameters(item).Count==0) + else if (name != null && name != "MappingColumn" && !name.StartsWith("Row") && ExpressionTool.GetMethodName(item) == "Format" && ExpressionTool.GetParameters(item).Count == 0) { - var value = ExpressionTool.DynamicInvoke(item); + var value = ExpressionTool.DynamicInvoke(item); var p = AppendParameter(value); var methodCallExpressionArgs = new MethodCallExpressionArgs() { @@ -265,6 +265,31 @@ namespace SqlSugar { model.Args.Add(GetMethodCallArgs(parameter, (item as MemberExpression).Expression)); } + else if (isBoolValue && isIIF && item is MemberExpression&&ExpressionTool.GetParameters(item).Count()==0) + { + var expValue = GetNewExpressionValue(item); + expValue = this.Context.DbMehtods.Equals(new MethodCallExpressionModel() + { + Name = "Equals", + Args = new List() + { + new MethodCallExpressionArgs(){ + IsMember=true, + MemberName=expValue + }, + new MethodCallExpressionArgs(){ + IsMember=true, + MemberName= Context.DbMehtods.TrueValue() + } + } + }); + model.Args.Add(new MethodCallExpressionArgs() + { + IsMember = false, + MemberName = expValue, + MemberValue = expValue + }); + } else if (isBoolValue && isIIF && item is MemberExpression) { var argItem = GetMethodCallArgs(parameter, (item as MemberExpression).Expression); @@ -277,7 +302,7 @@ namespace SqlSugar } model.Args.Add(argItem); } - else if (name.IsIn("ListAny","ListAll") && item is LambdaExpression) + else if (name.IsIn("ListAny", "ListAll") && item is LambdaExpression) { var sql = GetNewExpressionValue(item, ResolveExpressType.WhereMultiple); var lamExp = (item as LambdaExpression); @@ -482,7 +507,7 @@ namespace SqlSugar } value = result; } - else if (name.IsIn("Contains", "StartsWith", "EndsWith") &&item==args.Last()&& ExpressionTool.IsSqlParameterDbType(this.Context, args.First())) + else if (!(item is ParameterExpression)&& name.IsIn("Contains", "StartsWith", "EndsWith") &&item==args.Last()&& ExpressionTool.IsSqlParameterDbType(this.Context, args.First())) { var myvalue = ExpressionTool.DynamicInvoke(args.Last()); var parametre = ExpressionTool.GetParameterBySqlParameterDbType(this.Context.ParameterIndex,myvalue, this.Context, args.First()); diff --git a/Src/Asp.Net/SqlSugar/Interface/ISimpleClient.cs b/Src/Asp.Net/SqlSugar/Interface/ISimpleClient.cs index 584fea882..fef916dc0 100644 --- a/Src/Asp.Net/SqlSugar/Interface/ISimpleClient.cs +++ b/Src/Asp.Net/SqlSugar/Interface/ISimpleClient.cs @@ -13,6 +13,7 @@ namespace SqlSugar RepositoryType CopyNew() where RepositoryType : ISugarRepository; SimpleClient Change() where ChangeType : class, new(); RepositoryType ChangeRepository() where RepositoryType : ISugarRepository ; + RepositoryType ChangeRepository(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository; IDeleteable AsDeleteable(); IInsertable AsInsertable(List insertObjs); IInsertable AsInsertable(T insertObj); diff --git a/Src/Asp.Net/SqlSugar/SimpleClient.cs b/Src/Asp.Net/SqlSugar/SimpleClient.cs index b907d095a..fa6c4b06e 100644 --- a/Src/Asp.Net/SqlSugar/SimpleClient.cs +++ b/Src/Asp.Net/SqlSugar/SimpleClient.cs @@ -79,11 +79,11 @@ namespace SqlSugar } public RepositoryType CopyNew(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository { - var instance = handleDependencies(typeof(RepositoryType), serviceProvider); + var instance = handleDependencies(typeof(RepositoryType), serviceProvider,true); return (RepositoryType)instance; } - private object handleDependencies(Type type, IServiceProvider serviceProvider) + private object handleDependencies(Type type, IServiceProvider serviceProvider,bool needNewCopy = false) { ConstructorInfo constructorInfo = null; var newInstanceType = type; @@ -103,8 +103,7 @@ namespace SqlSugar object dependencyInstance = serviceProvider.GetService(type); if (dependencyInstance is ISugarRepository sugarRepository) { - sugarRepository.Context = sugarRepository.Context.CopyNew(); - return sugarRepository; + return setContext(sugarRepository, needNewCopy); } else { @@ -130,7 +129,28 @@ namespace SqlSugar } return instance; } - + private ISugarRepository setContext(ISugarRepository sugarRepository,bool needNewCopy) + { + if (sugarRepository.Context != null) + { + if (needNewCopy) + { + sugarRepository.Context = sugarRepository.Context.CopyNew(); + } + } + else + { + if (needNewCopy) + { + sugarRepository.Context = this.Context.CopyNew(); + } + else + { + sugarRepository.Context = this.Context; + } + } + return sugarRepository; + } private bool IsAssignableToBaseRepository(Type type) { var baseInterfaces = type.GetInterfaces(); @@ -169,6 +189,11 @@ namespace SqlSugar } return result; } + public RepositoryType ChangeRepository(IServiceProvider serviceProvider) where RepositoryType : ISugarRepository + { + var instance = handleDependencies(typeof(RepositoryType), serviceProvider, false); + return (RepositoryType)instance; + } public ISugarQueryable AsQueryable() { return Context.Queryable();