【Delete 删除数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录

🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀


文章目录


前言 🍃

前面的章节介绍了各种 SqlSugar 各种场景的 查询 操作,接下来将介绍 SqlSugar 增、删、改 相关操作。数据库 插入 数据的方法包括:使用 SQL 插入语句、通过 ORM 框架、使用 批量插入 技术、利用 存储过程

一、根据实体删除

1.1 强类型实体

需要配置 主键 ,根据主键删除需要给实体配置主键,参考文档实体配置:

csharp 复制代码
//单个实体
db.Deleteable<Student>(new Student() { Id = 1 }).ExecuteCommand();
 
//List<实体> (可以不加Where)
List<Student> list=new List<Student>(){
  new Student() { Id = 1 }
};
db.Deleteable<Student>(list).ExecuteCommand(); //批量删除
 
//批量删除+分页
db.Deleteable<Order>(list).PageSize(500).ExecuteCommand();
函数 说明
ExecuteCommand 返回受影响行数 , update where 如果没找到那么就会返回 0
ExecuteCommandHasChange 返回bool ,等同于 bool isChange= ExecuteCommand()>0

2.2 无主键实体删除

注意:请升级到5.1.4.60-preview02

csharp 复制代码
List<T> list=new List<T>(){...};
db.Deleteable<Order>().WhereColumns(list,it=>new { it.Id}).ExecuteCommand();

2.3 Object、接口、抽象类 删除

csharp 复制代码
//2.Object对象插入 (5.1.3.45)
//o必须是真实的类对象 (比如根据type反射出来的对象,或者转成了Object的实体)
 db.DeleteableByObject(o).ExecuteCommand();
  
//更多功能 :动态建类等
https://www.donet5.com/Home/Doc?typeId=2562

二、根据主键

csharp 复制代码
db.Deleteable<Student>().In(1).ExecuteCommand();
//无主键用法
db.Deleteable<Order>().In(it=>it.Id,1).ExecuteCommand();

三、根据主键数组

csharp 复制代码
db.Deleteable<Student>().In(new int[] { 1, 2 }).ExecuteCommand();
//无主键用法
db.Deleteable<Student>().In(it=>it.Id,new int[] { 1, 2 }).ExecuteCommand();
//Oracle用户注意:这种方式只能删除1000,用达式方式.Where(it=>ids.Contains(it.Id)支持1000以上

🎯Oracle用户注意:这种方式只能删除1000,用达式方式.Where(it=>ids.Contains(it.Id)支持1000

四、根据表达式

csharp 复制代码
db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();

五、联表删除

csharp 复制代码
db.Deleteable<Student>()
             .Where(p => SqlFunc.Subqueryable<School>().Where(s => s.Id == p.SchoolId).Any())
             .ExecuteCommand()
//.Where(s => s.Id == p.SchoolId)  s和p的关联条件不能少,不然就全删了

六、无实体删除

csharp 复制代码
db.Deleteable<object>().AS("[Order]").Where("id=@id",new { id=1}).ExecuteCommand();
db.Deleteable<object>().AS("[Order]").Where("id in (@id) ",new { id=new int[]{1,2,3}}).ExecuteCommand();//批量
 
//根据字典集合删除 
List<Dictionary<string,object>> list= new List<Dictionary<string,object>>;
list.Add(字典);
db.Deleteable<object>().AS("[Order]").WhereColumns(list).ExecuteCommand();
 
//DataTable也可以转成字典集合
List<Dictionary<string,object>> list= db.Utilities.DataTableToDictionaryList(dataTable);//转成字典

七、全局过滤器

🔖版本要求:(5.0.4.1)

csharp 复制代码
//配置表过滤器
db.QueryFilter.Add(new TableFilterItem<Order>(it => it.Name.Contains("a")));
 
//查询有效 
db.Queryable<Order>().ToList();
//SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order]  WHERE  ([Name] like '%'+@MethodConst0+'%') 
 
//删除也有效
db.Deleteable<Order>().EnableQueryFilter().Where(it=>it.Id==1).ExecuteCommand();
//DELETE FROM [Order] WHERE  ([Name] like '%'+@MethodConst1000+'%')  AND ( [Id] = @Id0 )

八、逻辑删除

🔖版本要求:(5.0.4.3)

8.1 逻辑删除方式1:

优点:简单直接用,如果有数据过滤器建议用方式2

实体属性有 isdelete 或者 isdeleted

csharp 复制代码
db.Deleteable<LogicTest>().In(100).IsLogic().ExecuteCommand(); //假删除 软删除

指定属性

csharp 复制代码
 db.Deleteable<LogicTest>().In(100).IsLogic().ExecuteCommand("mydelete");

指定属性并且修改时间

csharp 复制代码
 db.Deleteable<LogicTest>().In(100).IsLogic().ExecuteCommand("mydelete",true,DateTime.Now,"UpdateTime");

指定属性并且修改时间+用户

csharp 复制代码
 db.Deleteable<LogicTest>()
   .In(100)
   .IsLogic()
   .ExecuteCommand("mydelete",true,DateTime.Now,"UpdateTime","ModifierName",userId);

说明:用法与删除一样唯一多了个 .IsLogic()

8.2 逻辑删除方式2:

优点:可以结合更新过滤器一起生效

csharp 复制代码
public void FalseDelete<T>(Expression<Func<T,bool>> exp) where T:class,IDeleted,new()//约束3个不能少
    {
        db.Updateable<T>()
                .SetColumns(it => new T() {  IsDeleted = true },
                 true)//true 支持更新数据过滤器赋值字段一起更新
                .Where(exp).ExecuteCommand();
    }
     
    //建一个接口,继承这个接口的类就能用FalseDelete
    public interface IDeleted
    {
        bool IsDeleted { get; set; }
    }

九、初始化表

表中数据全部清空,清除,自增初始化

csharp 复制代码
db.DbMaintenance.TruncateTable<T>()

十、导航删除

csharp 复制代码
db.DeleteNav<OperatorInfo>(x=>x.id==1)
                .Include(x => x.Roles)
                .ExecuteCommand();

十一、常用案例

11.1 除最新N条清空

csharp 复制代码
db.Deleteable<Order>().In(it => it.Id, 
                 db.Queryable<Order>()
                 .Skip(10).OrderByDescending(it=>it.CreateTime)//Take(10)最新10条2个有区别
                   .Select(it => it.Id)).ExecuteCommand();
                   //注意Select不要ToList()  , ToList就2次查询了

🎯注意 Select 不要 ToList() , ToList就 2 次查询了。

11.2 N到N条删除

csharp 复制代码
db.Deleteable<Order>().In(it => it.Id, 
                    db.Queryable<Order>()
                   .Skip(10).Take(10) 
                   .Select(it => it.Id)).ExecuteCommand();
                   //注意Select不要ToList() , ToList就2次查询了

🎯注意 Select 不要 ToList() , ToList就 2 次查询了。

11.3 大数据删除

csharp 复制代码
db.Deleteable<Order>(list).PageSize(500).ExecuteCommand();

🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀

【开篇】.NET开源 ORM 框架 SqlSugar 系列
【入门必看】.NET开源 ORM 框架 SqlSugar 系列
【实体配置】.NET开源 ORM 框架 SqlSugar 系列
【Db First】.NET开源 ORM 框架 SqlSugar 系列
【Code First】.NET开源 ORM 框架 SqlSugar 系列
【数据事务】.NET开源 ORM 框架 SqlSugar 系列
【连接池】.NET开源 ORM 框架 SqlSugar 系列
【查询目录】.NET开源 ORM 框架 SqlSugar 系列
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
【排序用法】.NET开源 ORM 框架 SqlSugar 系列
【分组去重】.NET开源 ORM 框架 SqlSugar 系列
【联表查询】.NET开源 ORM 框架 SqlSugar 系列
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
【子查询】.NET开源 ORM 框架 SqlSugar 系列
【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
【配置查询】.NET开源 ORM 框架 SqlSugar 系列
【并集查询】.NET开源 ORM 框架 SqlSugar 系列
【树型查询】.NET开源 ORM 框架 SqlSugar 系列
【表格查询】.NET开源 ORM 框架 SqlSugar 系列
【动态表达式】.NET开源 ORM 框架 SqlSugar 系列
【查询函数】.NET开源ORM框架 SqlSugar 系列
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
【跨库查询、多库查询】.NET开源 ORM 框架
​【报表查询】.NET开源ORM框架 SqlSugar 系列
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
【查询返回结果类型】.NET开源ORM框架 SqlSugar 系列
【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
【SqlSugar雪花ID常见问题】.NET开源ORM框架 SqlSugar 系列
【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列


相关推荐
wAIxiSeu10 分钟前
开源项目分享——CLI-Anything
开源·github
进击monkey20 分钟前
2026 年 AI Wiki 推荐:PandaWiki——AI 原生+开源私有化,企业级知识库最优解
人工智能·开源·ai知识库
常利兵24 分钟前
Spring Boot缓存新玩法:一键切换,租户无忧
spring boot·后端·缓存
想你的液宝25 分钟前
Spring Boot @RestControllerAdvice:统一异常处理的利器
后端
大傻^25 分钟前
Spring AI Alibaba 企业级实战:从0到1构建智能客服系统
java·人工智能·后端·spring·springaialibaba
霪霖笙箫27 分钟前
真授之以渔:我是怎么从"想给文章配几张图",一步步做出一个可发布 skill 的
前端·人工智能·开源
短剑重铸之日30 分钟前
《ShardingSphere解读》11 解析引擎:SQL 解析流程应该包括哪些核心阶段?(上)
java·后端·spring·shardingsphere·分库分表
MekoLi2937 分钟前
MongoDB 新手完全指南:从入门到精通的实战手册
数据库·后端
亥时科技41 分钟前
2026 低空经济政策红利释放!开源 AI 无人机平台成产业落地新引擎
开源·无人机
会算数的⑨1 小时前
演进——从查日志到 AI 自治,企业监控体系的变迁
人工智能·分布式·后端·微服务·云原生