using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace SqlSugar { public class DeleteNavTaskInit where T : class, new() where Root : class, new() { internal List Roots { get; set; } internal SqlSugarProvider Context { get; set; } internal DeleteNavProvider deleteNavProvider { get; set; } public DeleteNavTask Include(Expression> expression) where TChild : class, new() { this.Context = deleteNavProvider._Context; DeleteNavTask result = new DeleteNavTask(); Func> func = () => deleteNavProvider.ThenInclude(expression); result.PreFunc = func; result.Context = this.Context; return result; } public DeleteNavTask Include(Expression>> expression) where TChild : class, new() { this.Context = deleteNavProvider._Context; DeleteNavTask result = new DeleteNavTask(); Func> func = () => deleteNavProvider.ThenInclude(expression); result.PreFunc = func; result.Context = this.Context; return result; } public DeleteNavTask Include(Expression>> expression,DeleteNavOptions deleteNavOptions) where TChild : class, new() { var result= Include(expression); deleteNavProvider.deleteNavOptions = deleteNavOptions; return result; } } public class DeleteNavTask where T : class, new() where Root : class, new() { public SqlSugarProvider Context { get; set; } public Func> PreFunc { get; set; } public DeleteNavTask ThenInclude(Expression> expression) where TChild : class, new() { DeleteNavTask result = new DeleteNavTask(); Func> func = () => PreFunc().ThenInclude(expression); result.PreFunc = func; result.Context = this.Context; return result; } public DeleteNavTask ThenInclude(Expression>> expression) where TChild : class, new() { DeleteNavTask result = new DeleteNavTask(); Func> func = () => PreFunc().ThenInclude(expression); result.PreFunc = func; result.Context = this.Context; return result; } public DeleteNavTask ThenInclude(Expression>> expression,DeleteNavOptions deleteNavOptions) where TChild : class, new() { DeleteNavTask result = new DeleteNavTask(); Func> func = () => { var dev = PreFunc(); dev.deleteNavOptions = deleteNavOptions; return dev.ThenInclude(expression); }; result.PreFunc = func; result.Context = this.Context; return result; } public DeleteNavTask Include(Expression> expression) where TChild : class, new() { return AsNav().ThenInclude(expression); } public DeleteNavTask Include(Expression>> expression) where TChild : class, new() { return AsNav().ThenInclude(expression); } public DeleteNavTask Include(Expression>> expression,DeleteNavOptions options) where TChild : class, new() { return AsNav().ThenInclude(expression, options); } public bool ExecuteCommand() { PreFunc(); var hasTran = this.Context.Ado.Transaction != null; if (hasTran) { ExecTasks(); } else { this.Context.Ado.UseTran(() => { ExecTasks(); }, ex => throw ex); } return true; } public async Task ExecuteCommandAsync() { await Task.Run(async () => { ExecuteCommand(); await Task.Delay(0); }); return true; } private DeleteNavTask AsNav() { DeleteNavTask result = new DeleteNavTask(); Func> func = () => PreFunc().AsNav(); result.PreFunc = func; result.Context = this.Context; return result; } private void ExecTasks() { var tasks=(List)this.Context.TempItems["_DeleteNavTask"]; tasks.Reverse(); foreach (var task in tasks) { task(); } this.Context.TempItems.Remove("_DeleteNavTask"); } } }