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

devtools/2025/1/18 12:22:39/

系列文章目录

🎀🎀🎀 .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/devtools/151556.html

相关文章

WPS计算机二级•高效操作技巧

听说这里是目录哦 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9;横排转竖排&#x1f350;批量删除表格空白行&#x1f348;方法一方法二建辅助列找空值 能量站&#x1f61a; 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9; 选中单元格&#xff0c;单击右键➡️“设…

macos arm 本地/docker/本地k8s 安装jupyterhub 并登陆

概述 很多文章写的启动官方docker镜像后,新建linux用户即可直接登录,不知道是否版本原因,总之目前最新版我亲测不可以,踩坑两天,这里记录下解决过程,以及各种细节在文档中的位置.以及为什么官方镜像不能直接使用的原因. part1 本地安装jupyterhub https://jupyterhub.readth…

无公网IP 实现外网访问本地 Docker 部署 Navidrome

Navidrome 是一款可以在 macOS、Linux、Windows以及 Docker 等平台上运行的跨平台开源音乐服务器应用&#xff0c;它支持传输常见的 MP3、FLAC、WAV等音频格式。允许用户通过 Web 界面或 API 进行音乐库的管理和访问。本文就介绍如何快速在 Linux 系统使用 Docker 进行本地部署…

iis强制重定向https

以下是在 IIS 10 中配置将 HTTP 请求的 403 错误重定向到 HTTPS 的步骤&#xff1a; 0.选择站点&#xff0c;ssl设置&#xff0c;勾选“要求sll”&#xff0c;下边忽略。 打开 IIS 管理器。 选择您要配置的网站。 在 “功能视图” 中&#xff0c;双击 “错误页”。 在 “错误…

(8)ERC20详细介绍

ERC20 是以太坊上的一种代币标准&#xff08;同质化代币&#xff09;&#xff0c;由 Fabian Vogelsteller 在 2015 年提出。它定义了一组通用的接口和规则&#xff0c;使得开发者可以创建可互操作的代币。ERC20 代币在以太坊生态系统中非常流行&#xff0c;广泛应用于各种去中心…

STM32三导联蓝牙心电监护仪设计,C#上位机显示波形 附源码与电路和论文

资料下载地址&#xff1a;STM32三导联蓝牙心电监护仪设计,C#上位机显示波形 附源码与电路和论文 目录 摘要 1. 引言 2. 系统方案 3. 系统硬件设计 3.1 系统原理框图设计 3.2 系统主要元器件介绍 3.2.1 STM32F103VET6主控芯片 3.2.2 AD8232模拟前…

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下&#xff1a; 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径&#xff0c;否则可能有类似错误 源码是基于Linux2.3内核编译&#xff0c;我当前是6.8.0-51&#xff0c;数据结构有升级&#xff0c;需要调…

Vue3:当v-if和v-for同时使用时产生的问题和解决办法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbci…