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

ops/2025/1/18 21:12:13/

系列文章目录

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


文章目录

  • 系列文章目录
  • 前言 🍃
  • 一、根据实体删除
    • 1.1 强类型实体
    • 2.2 无主键实体删除
    • 2.3 Object、接口、抽象类 删除
  • 二、根据主键
  • 三、根据主键数组
  • 四、根据表达式
  • 五、联表删除
  • 六、无实体删除
  • 七、全局过滤器
  • 八、逻辑删除
    • 8.1 逻辑删除方式1:
    • 8.2 逻辑删除方式2:
  • 九、初始化表
  • 十、导航删除
  • 十一、常用案例
    • 11.1 除最新N条清空
    • 11.2 N到N条删除
    • 11.3 大数据删除
  • 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀


前言 🍃

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

一、根据实体删除

1.1 强类型实体

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

//单个实体
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


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

2.3 Object、接口、抽象类 删除

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

二、根据主键

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

三、根据主键数组


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

四、根据表达式

db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();

五、联表删除

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

六、无实体删除


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)

//配置表过滤器
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

db.Deleteable<LogicTest>().In(100).IsLogic().ExecuteCommand(); //假删除 软删除

指定属性

 db.Deleteable<LogicTest>().In(100).IsLogic().ExecuteCommand("mydelete");

指定属性并且修改时间

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

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

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

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

8.2 逻辑删除方式2:

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

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();}//建一个接口,继承这个接口的类就能用FalseDeletepublic interface IDeleted{bool IsDeleted { get; set; }}

九、初始化表

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


db.DbMaintenance.TruncateTable<T>()

十、导航删除

db.DeleteNav<OperatorInfo>(x=>x.id==1).Include(x => x.Roles).ExecuteCommand();

十一、常用案例

11.1 除最新N条清空

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条删除

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 大数据删除

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 系列


在这里插入图片描述


http://www.ppmy.cn/ops/151186.html

相关文章

【C++】反向迭代器

反向迭代器 一.源码及框架分析二.反向迭代器实现代码1.ReverseIterator.h2.Vector.h3.List.h4.Test.cpp 一.源码及框架分析 SGI-STL30版本源代码&#xff0c;反向迭代器实现的核心源码在stl_iterator.h中&#xff0c;反向迭代器是一个适配器&#xff0c;各个容器中再适配出自己…

从玩具到工业控制--51单片机的跨界传奇【3】

在科技的浩瀚宇宙中&#xff0c;51 单片机就像一颗独特的星辰&#xff0c;散发着神秘而迷人的光芒。对于无数电子爱好者而言&#xff0c;点亮 51 单片机上的第一颗 LED 灯&#xff0c;不仅仅是一次简单的操作&#xff0c;更像是开启了一扇通往新世界的大门。这小小的 LED 灯&am…

matlab函数的主要目的是对包含在 Excel 电子表格中的实验数据进行模型拟合

function Latex_Fitting_Sample_Code% clear screen and all variablesclc; clear;% 包含恒定通量横流结垢实验数据的 Excel 电子表格filename = Experimental Data.xlsx;% 包含模型拟合数据的 Excel 电子表格filename2 = Model Fit.xlsx; % 下面的循环采用不规则滤饼模型拟合 …

[ACTF新生赛2020]SoulLike

[ACTF新生赛2020]SoulLike 一、查壳 无壳&#xff0c;64位 二、IDA分析 1.main 一眼看到关键函数sub_83A 2.sub_83A 显示不出来&#xff0c;搜了一下解决方法&#xff1a; 找到ida目录中的cfg的hexrays.cfg点击进去将MAX_FUNCSIZE 由64修改为1024&#xff0c;在打开ida点…

自动连接校园网wifi脚本实践(自动网页认证)

目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态&#xff1f; 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑&#xff0c;但是最近实验室老是断电&#xff0c;但重启后也不会自动连接校园网账户认证&#xff0c;远程工具&…

如何在若依框架中自定义添加一个页面

目录 前提条件&#xff1a; 1. 在 Vue 前端添加页面 2. 在 Spring Boot 后端添加页面 3. 数据交互&#xff08;前后端&#xff09; 再开发过程中&#xff0c;我们通常希望在 若依管理系统&#xff08;RuoYi&#xff09;中自定义添加一个页面&#xff0c;通常需要按照以下步骤…

基于单片机的智能火灾报警系统设计

【文章摘要】火灾报警器是当前社会经济生产生活中较为常用的火灾预警装置,对国民经济及人员生命财产安全起到了重要的保障作用。随着现代科学技术快速发展,智能控制芯片的应用使得火灾报警器反应灵敏度大幅提升,对早期火情发现与控制起到了重要的推动作用。为此,本文以 AT8…

Go实现设计模式

1、是什么 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结&#xff0c;使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。 通俗来说&#xff1a;是一个项目的代码层面设计架构&#xff0c;代码功能的排…