diff --git a/Src/Asp.Net/SqlServerTest/Demos/4_Delete.cs b/Src/Asp.Net/SqlServerTest/Demos/4_Delete.cs index e02e99cec..5ca74d226 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/4_Delete.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/4_Delete.cs @@ -28,6 +28,13 @@ namespace OrmTest.Demo var t41 = db.Deleteable().In(new int[] { 1, 2 }.Select(it=>it)).ExecuteCommand(); var t42 = db.Deleteable().In(new int[] { 1, 2 }.AsEnumerable()).ExecuteCommand(); + + //by exp key array + var t44 = db.Deleteable().In(it=>it.SchoolId,new int[] { 1, 2 }).ExecuteCommand(); + var t441 = db.Deleteable().In(it => it.SchoolId,new int[] { 1, 2 }.Select(it => it)).ExecuteCommand(); + var t442 = db.Deleteable().In(it => it.SchoolId,new int[] { 1, 2 }.AsEnumerable()).ExecuteCommand(); + var t443 = db.Deleteable().In(it => it.SchoolId, new int[] { 1, 2 }.ToList()).ExecuteCommand(); + //by expression id>1 and id==1 var t5 = db.Deleteable().Where(it => it.Id > 1).Where(it => it.Id == 1).ExecuteCommand(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index d8d89d15d..0e81aac48 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -20,6 +20,7 @@ namespace SqlSugar public bool IsAs { get; set; } public bool IsEnableDiffLogEvent { get; set; } public DiffLogModel diffModel { get; set; } + public List tempPrimaryKeys { get; set; } public EntityInfo EntityInfo { get @@ -35,7 +36,7 @@ namespace SqlSugar RestoreMapping(); AutoRemoveDataCache(); Before(sql); - var result= Db.ExecuteCommand(sql, paramters); + var result = Db.ExecuteCommand(sql, paramters); After(sql); return result; } @@ -265,6 +266,34 @@ namespace SqlSugar return this; } + public IDeleteable In(Expression> inField, PkType primaryKeyValue) + { + var lamResult = DeleteBuilder.GetExpressionValue(inField, ResolveExpressType.FieldSingle); + var fieldName = lamResult.GetResultString(); + tempPrimaryKeys = new List() { fieldName }; + var result = In(primaryKeyValue);; + tempPrimaryKeys = null; + return this; + } + public IDeleteable In(Expression> inField, PkType[] primaryKeyValues) + { + var lamResult = DeleteBuilder.GetExpressionValue(inField, ResolveExpressType.FieldSingle); + var fieldName = lamResult.GetResultString(); + tempPrimaryKeys = new List() { fieldName }; + var result = In(primaryKeyValues); + tempPrimaryKeys = null; + return this; + } + public IDeleteable In(Expression> inField, List primaryKeyValues) + { + var lamResult = DeleteBuilder.GetExpressionValue(inField, ResolveExpressType.FieldSingle); + var fieldName = lamResult.GetResultString(); + tempPrimaryKeys = new List() { fieldName }; + var result = In(primaryKeyValues); + tempPrimaryKeys = null; + return this; + } + public IDeleteable With(string lockString) { if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer) @@ -283,7 +312,11 @@ namespace SqlSugar private List GetPrimaryKeys() { - if (this.Context.IsSystemTablesConfig) + if (tempPrimaryKeys.HasValue()) + { + return tempPrimaryKeys; + } + else if (this.Context.IsSystemTablesConfig) { return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityMaintenance.GetTableName(this.EntityInfo.EntityName)); } @@ -315,7 +348,8 @@ namespace SqlSugar private void TaskStart(Task result) { - if (this.Context.CurrentConnectionConfig.IsShardSameThread) { + if (this.Context.CurrentConnectionConfig.IsShardSameThread) + { Check.Exception(true, "IsShardSameThread=true can't be used async method"); } result.Start(); diff --git a/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs index 674654940..418da3063 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IDeleteable.cs @@ -22,6 +22,9 @@ namespace SqlSugar IDeleteable In(PkType primaryKeyValue); IDeleteable In(PkType[] primaryKeyValues); IDeleteable In(List primaryKeyValues); + IDeleteable In(Expression> inField,PkType primaryKeyValue); + IDeleteable In(Expression> inField,PkType[] primaryKeyValues); + IDeleteable In(Expression> inField,List primaryKeyValues); IDeleteable Where(string whereString,object parameters=null); IDeleteable Where(string whereString, SugarParameter parameter); IDeleteable Where(string whereString, SugarParameter[] parameters);