SqlSugar删除数据
1、根据实体删除
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 |
2、根据主键
db.Deleteable<Student>().In(1).ExecuteCommand();//无主键用法db.Deleteable<Order>().In(it=>it.Id,1).ExecuteCommand(); |
3、根据主键数组
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以上 |
4、根据表达式
db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand(); |
5、联表删除
db.Deleteable<Student>() .Where(p => SqlFunc.Subqueryable<School>().Where(s => s.Id == p.SchoolId).Any()) .ExecuteCommand()//.Where(s => s.Id == p.SchoolId) s和p的关联条件不能少,不然就全删了 |
6、无实体删除
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);//转成字典 |
7、全局过滤器(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 ) |
8、逻辑删除(5.0.4.3)
逻辑删除方式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()
逻辑删除方式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(); } //建一个接口,继承这个接口的类就能用FalseDelete public interface IDeleted { bool IsDeleted { get; set; } } |
9、初始化表
表中数据全部清空,清除,自增初始化
db.DbMaintenance.TruncateTable<T>() |
10、导航删除
db.DeleteNav<OperatorInfo>(x=>x.id==1) .Include(x => x.Roles) .ExecuteCommand(); |
具体用法:https://www.donet5.com/Home/Doc?typeId=24314
11、常用案例1:除最新N条清空
db.Deleteable<Order>().In(it => it.Id, db.Queryable<Order>() .Skip(10).OrderByDescending(it=>it.CreateTime) .Select(it => it.Id)).ExecuteCommand(); //注意Select不要ToList() , ToList就2次查询了 |
12、常用案例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次查询了 |
13、常用案例3:大数据删除
db.Deleteable<Order>(list).PageSize(500).ExecuteCommand(); |
SqlSugar删除数据的更多相关文章
- CRL快速开发框架系列教程四(删除数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 读书笔记--SQL必知必会16--更新和删除数据
16.1 更新数据 使用UPDATE语句更新或修改表中的数据.必须有足够的安全权限. 更新表中的特定行 更新表中的所有行 使用UPDATE时一定要细心,不要省略WHERE子句. SET命令用来将新值赋 ...
- Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...
- MySQL数据库5 - 插入数据,修改数据,删除数据
一.插入数据 1. 所有列都插入值 INSERT [INTO] TABLE_NAME VALUES(V1,V2....Vn); 特点:列值同数,列值同序 eg: insert into users v ...
- X删除数据表的新用法
删除数据表,可以这样进行,以前傻不拉唧的用sql去手动删除. DAL dal = ... dal.Db.CreateMetaData().SetSche ...
- Kafka深入理解-3:Kafka如何删除数据(日志)文件
Kafka作为消息中间件,数据需要按照一定的规则删除,否则数据量太大会把集群存储空间占满. 参考:apache Kafka是如何实现删除数据文件(日志)的 Kafka删除数据有两种方式 按照时间,超过 ...
- MySQL(四) 数据表的插入、更新、删除数据
序言 数据表的插入.更新.删除非常简单,但是简单的也要学习,细节决定成败. ---WH 一.插入数据 格式:INSERT INTO 表名(字段名...)VALUES(值...); 创建环境 使用per ...
- ThinkPHP 修改,删除数据,全部显示
1,修改数据 //数据修改 function Update() { $model = D("info"); /* //1,数组方式 $attr = array( "Cod ...
- Oracle 恢复被删除的数据,解决误操作删除数据
在删除数据的时候不小心,把delete语句执行错了,把别的表给delete,而且还执行了commit!真汗.......数据是相当的重要........废话少说了!赶快找方法吧: 第一种: 1.打开F ...
- 【mongo】pymongo通过_id删除数据
来源:http://www.educity.cn/wenda/361741.html pymongo 根据 objectId _id 来删除数据想要删除数据,根据_id ,是最靠谱的,具体方法因为 _ ...
随机推荐
- Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
Docker Jenkins 安装配置 Windows 2016 安装 Jenkins 前置条件可参考 Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包 Jen ...
- .Net Core 开发框架,支持多版本的类库
工具:Visual Studio 2019 1.新建一个 .NET Standard 类库. 2.填写项目名称 3.编辑项目文件 可以看到当前类库默认为 netstandard2.0,而此时其xml标 ...
- 围绕ChatGPT,做了点小事,赚了点小钱
大家好,我是章北海mlpy 作为 ChatGPT 日活用户,分享一下经验和用它做的一些小事吧. 经验不敢当,只是觉得大家把ChatGPT当成了高大上的黑科技,其实它就是个工具,就像你买了个新手机一样, ...
- C223 生产版本BAPI
1.事务代码:C223 2.调用函数CM_FV_PROD_VERS_DB_UPDATE "-----------------------------@斌将军----------------- ...
- The 18th Zhejiang Provincial Collegiate Programming Contest 补题记录(ACFGJLM)
补题链接:Here A. League of Legends 签到题,求和判断即可 ll suma, sumb; void solve() { ll x; for (int i = 1; i < ...
- 第六届蓝桥杯C++C组 A~F题题解
蓝桥杯历年国赛真题汇总:Here 1. 分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, ...
- 第十二届蓝桥杯C++B组 A~H题题解
本次题解格式参考 墨羽魂韶 本文所用的试题: 第十二届蓝桥杯大赛软件赛省赛_CB.pdf 最后编辑时间 2021年4月29日 21:27:46 2022 年 4月 8号 15点13分 填空题答案速览 ...
- AtCoder Beginner Contest 175 (AB水,C数学,D思维+前缀和处理+进价思考,E方阵+条件DP,F新回文字符串处理 GJ)
补题链接:Here A - Rainy Season 如果不是 RSR 型的话直接计算 R 的数量即可 B - Making Triangle 给定 \(N\) 根长度分别为 \(L_i\) 的棍子, ...
- AtCoder Beginner Contest 189 Personal Editorial
第一次参加 AtCoder 的比赛,感觉还挺简单. 比赛链接:https://atcoder.jp/contests/abc189 A - Slot // Author : RioTian // Ti ...
- 【调试】kprobes(二)使用方法
前言 上一节介绍了kprobe的基本概念,下面我们将使用几个具体的例子,看下kprobe在实际使用中有那些应用场景. kprobe 内核的samples/kprobe目录下有kprobe相关的例子,我 ...