diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index ed3fa98a1..9fc44eeb6 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -405,6 +405,18 @@ namespace SqlSugar } return this; } + public IDeleteable EnableQueryFilter(Type type) + { + var queryable = this.Context.Queryable().Filter(type); + queryable.QueryBuilder.LambdaExpressions.ParameterIndex = 1000; + var sqlable = queryable.ToSql(); + var whereInfos = Regex.Split(sqlable.Key, " Where ", RegexOptions.IgnoreCase); + if (whereInfos.Length > 1) + { + this.Where(whereInfos.Last(), sqlable.Value); + } + return this; + } public SplitTableDeleteProvider SplitTable(Func, IEnumerable> getTableNamesFunc) { UtilMethods.StartCustomSplitTable(this.Context, typeof(T)); diff --git a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavManyToMany.cs b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavManyToMany.cs index 8debba876..e011ccfd0 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavManyToMany.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/ExecuteNavProvider/UpdateNavManyToMany.cs @@ -111,6 +111,10 @@ namespace SqlSugar .SetColumns(locgicColumn.DbColumnName, true) .ExecuteCommand(); } + else if (_Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoDeleteQueryFilter == true) + { + this._Context.Deleteable().AS(mappingEntity.DbTableName).In(mappingA.DbColumnName, ids).EnableQueryFilter(mappingEntity.Type).ExecuteCommand(); + } else { this._Context.Deleteable().AS(mappingEntity.DbTableName).In(mappingA.DbColumnName, ids).ExecuteCommand(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs index 298dfd918..e7049e412 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryMethodInfo.cs @@ -251,6 +251,12 @@ namespace SqlSugar var reslt = method.Invoke(QueryableObj, new object[] { }); return (string)reslt; } + public KeyValuePair> ToSql() + { + var method = QueryableObj.GetType().GetMyMethod("ToSql", 0); + var reslt = method.Invoke(QueryableObj, new object[] { }); + return (KeyValuePair>)reslt; + } public object InSingle(object pkValue) { var method = QueryableObj.GetType().GetMyMethod("InSingle", 1); diff --git a/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs index 100c96b10..8102accda 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs @@ -48,6 +48,7 @@ namespace SqlSugar KeyValuePair> ToSql(); string ToSqlString(); IDeleteable EnableQueryFilter(); + IDeleteable EnableQueryFilter(Type type); SplitTableDeleteProvider SplitTable(Func, IEnumerable> getTableNamesFunc); SplitTableDeleteByObjectProvider SplitTable(); LogicDeleteProvider IsLogic();