From b5195c6075ef482eaf6a06efc74d379731269c27 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 25 Apr 2022 15:56:17 +0800 Subject: [PATCH] Update .net --- .../DeleteProvider/DeleteableProvider.cs | 15 +++++ .../SplitTableDeleteByObjectProvider.cs | 62 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteByObjectProvider.cs diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 7bcd4018b..a72d970f2 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -22,6 +22,7 @@ namespace SqlSugar public DiffLogModel diffModel { get; set; } public List tempPrimaryKeys { get; set; } internal Action RemoveCacheFunc { get; set; } + internal List DeleteObjects { get; set; } public EntityInfo EntityInfo { get @@ -87,6 +88,7 @@ namespace SqlSugar public IDeleteable Where(List deleteObjs) { + this.DeleteObjects = deleteObjs; if (deleteObjs == null || deleteObjs.Count() == 0) { Where(SqlBuilder.SqlFalse); @@ -292,6 +294,19 @@ namespace SqlSugar result.deleteobj = this; return result; } + public SplitTableDeleteByObjectProvider SplitTable() + { + SplitTableDeleteByObjectProvider result = new SplitTableDeleteByObjectProvider(); + result.Context = this.Context; + Check.ExceptionEasy(this.DeleteObjects == null, "SplitTable() +0 only List can be deleted", "SplitTable()无参数重载只支持根据实体集合删除"); + result.deleteObjects = this.DeleteObjects.ToArray(); + SplitTableContext helper = new SplitTableContext((SqlSugarProvider)Context) + { + EntityInfo = this.EntityInfo + }; + result.deleteobj = this; + return result; + } public LogicDeleteProvider IsLogic() { LogicDeleteProvider result = new LogicDeleteProvider(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteByObjectProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteByObjectProvider.cs new file mode 100644 index 000000000..7ea6200fb --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Abstract/DeleteProvider/SplitTableDeleteByObjectProvider.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class SplitTableDeleteByObjectProvider where T : class, new() + { + public ISqlSugarClient Context; + public DeleteableProvider deleteobj; + public T [] deleteObjects { get; set; } + + public int ExecuteCommand() + { + List groupModels; + int result; + GroupDataList(deleteObjects, out groupModels, out result); + foreach (var item in groupModels.GroupBy(it => it.GroupName)) + { + var addList = item.Select(it => it.Item).ToList(); + result += this.Context.Deleteable().Where(addList).AS(item.Key).ExecuteCommand(); + } + return result; + } + public async Task ExecuteCommandAsync() + { + List groupModels; + int result; + GroupDataList(deleteObjects, out groupModels, out result); + foreach (var item in groupModels.GroupBy(it => it.GroupName)) + { + var addList = item.Select(it => it.Item).ToList(); + result +=await this.Context.Deleteable().Where(addList).AS(item.Key).ExecuteCommandAsync(); + } + return result; + } + + private void GroupDataList(T[] datas, out List groupModels, out int result) + { + var attribute = typeof(T).GetCustomAttribute() as SplitTableAttribute; + Check.Exception(attribute == null, $"{typeof(T).Name} need SplitTableAttribute"); + groupModels = new List(); + var db = this.Context; + foreach (var item in datas) + { + var value = db.SplitHelper().GetValue(attribute.SplitType, item); + var tableName = db.SplitHelper().GetTableName(attribute.SplitType, value); + groupModels.Add(new GroupModel() { GroupName = tableName, Item = item }); + } + result = 0; + } + internal class GroupModel + { + public string GroupName { get; set; } + public T Item { get; set; } + } + } +}