mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-23 04:23:47 +08:00
Update .net
This commit is contained in:
@@ -22,6 +22,7 @@ namespace SqlSugar
|
|||||||
public DiffLogModel diffModel { get; set; }
|
public DiffLogModel diffModel { get; set; }
|
||||||
public List<string> tempPrimaryKeys { get; set; }
|
public List<string> tempPrimaryKeys { get; set; }
|
||||||
internal Action RemoveCacheFunc { get; set; }
|
internal Action RemoveCacheFunc { get; set; }
|
||||||
|
internal List<T> DeleteObjects { get; set; }
|
||||||
public EntityInfo EntityInfo
|
public EntityInfo EntityInfo
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -87,6 +88,7 @@ namespace SqlSugar
|
|||||||
|
|
||||||
public IDeleteable<T> Where(List<T> deleteObjs)
|
public IDeleteable<T> Where(List<T> deleteObjs)
|
||||||
{
|
{
|
||||||
|
this.DeleteObjects = deleteObjs;
|
||||||
if (deleteObjs == null || deleteObjs.Count() == 0)
|
if (deleteObjs == null || deleteObjs.Count() == 0)
|
||||||
{
|
{
|
||||||
Where(SqlBuilder.SqlFalse);
|
Where(SqlBuilder.SqlFalse);
|
||||||
@@ -292,6 +294,19 @@ namespace SqlSugar
|
|||||||
result.deleteobj = this;
|
result.deleteobj = this;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
public SplitTableDeleteByObjectProvider<T> SplitTable()
|
||||||
|
{
|
||||||
|
SplitTableDeleteByObjectProvider<T> result = new SplitTableDeleteByObjectProvider<T>();
|
||||||
|
result.Context = this.Context;
|
||||||
|
Check.ExceptionEasy(this.DeleteObjects == null, "SplitTable() +0 only List<T> 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<T> IsLogic()
|
public LogicDeleteProvider<T> IsLogic()
|
||||||
{
|
{
|
||||||
LogicDeleteProvider<T> result = new LogicDeleteProvider<T>();
|
LogicDeleteProvider<T> result = new LogicDeleteProvider<T>();
|
||||||
|
@@ -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<T> where T : class, new()
|
||||||
|
{
|
||||||
|
public ISqlSugarClient Context;
|
||||||
|
public DeleteableProvider<T> deleteobj;
|
||||||
|
public T [] deleteObjects { get; set; }
|
||||||
|
|
||||||
|
public int ExecuteCommand()
|
||||||
|
{
|
||||||
|
List<GroupModel> 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<T>().Where(addList).AS(item.Key).ExecuteCommand();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public async Task<int> ExecuteCommandAsync()
|
||||||
|
{
|
||||||
|
List<GroupModel> 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<T>().Where(addList).AS(item.Key).ExecuteCommandAsync();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GroupDataList(T[] datas, out List<GroupModel> groupModels, out int result)
|
||||||
|
{
|
||||||
|
var attribute = typeof(T).GetCustomAttribute<SplitTableAttribute>() as SplitTableAttribute;
|
||||||
|
Check.Exception(attribute == null, $"{typeof(T).Name} need SplitTableAttribute");
|
||||||
|
groupModels = new List<GroupModel>();
|
||||||
|
var db = this.Context;
|
||||||
|
foreach (var item in datas)
|
||||||
|
{
|
||||||
|
var value = db.SplitHelper<T>().GetValue(attribute.SplitType, item);
|
||||||
|
var tableName = db.SplitHelper<T>().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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user