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 { getset; }
    }

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删除数据的更多相关文章

  1. CRL快速开发框架系列教程四(删除数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. 读书笔记--SQL必知必会16--更新和删除数据

    16.1 更新数据 使用UPDATE语句更新或修改表中的数据.必须有足够的安全权限. 更新表中的特定行 更新表中的所有行 使用UPDATE时一定要细心,不要省略WHERE子句. SET命令用来将新值赋 ...

  3. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  4. MySQL数据库5 - 插入数据,修改数据,删除数据

    一.插入数据 1. 所有列都插入值 INSERT [INTO] TABLE_NAME VALUES(V1,V2....Vn); 特点:列值同数,列值同序 eg: insert into users v ...

  5. X删除数据表的新用法

    删除数据表,可以这样进行,以前傻不拉唧的用sql去手动删除.             DAL dal = ...             dal.Db.CreateMetaData().SetSche ...

  6. Kafka深入理解-3:Kafka如何删除数据(日志)文件

    Kafka作为消息中间件,数据需要按照一定的规则删除,否则数据量太大会把集群存储空间占满. 参考:apache Kafka是如何实现删除数据文件(日志)的 Kafka删除数据有两种方式 按照时间,超过 ...

  7. MySQL(四) 数据表的插入、更新、删除数据

    序言 数据表的插入.更新.删除非常简单,但是简单的也要学习,细节决定成败. ---WH 一.插入数据 格式:INSERT INTO 表名(字段名...)VALUES(值...); 创建环境 使用per ...

  8. ThinkPHP 修改,删除数据,全部显示

    1,修改数据 //数据修改 function Update() { $model = D("info"); /* //1,数组方式 $attr = array( "Cod ...

  9. Oracle 恢复被删除的数据,解决误操作删除数据

    在删除数据的时候不小心,把delete语句执行错了,把别的表给delete,而且还执行了commit!真汗.......数据是相当的重要........废话少说了!赶快找方法吧: 第一种: 1.打开F ...

  10. 【mongo】pymongo通过_id删除数据

    来源:http://www.educity.cn/wenda/361741.html pymongo 根据 objectId _id 来删除数据想要删除数据,根据_id ,是最靠谱的,具体方法因为 _ ...

随机推荐

  1. .Net Core 开发框架,支持多版本的类库

    工具:Visual Studio 2019 1.新建一个 .NET Standard 类库. 2.填写项目名称 3.编辑项目文件 可以看到当前类库默认为 netstandard2.0,而此时其xml标 ...

  2. Vue项目部署Nginx后,刷新页面出现404问题

    在Nginx配置文件nginx.conf中加入如下配置.(index.html根据实际页面配置) 增加:try_files $uri $uri/ /index.html; #解决页面刷新404问题 s ...

  3. Codeforce:455A. Boredom (DP)

    https://codeforces.com/problemset/problem/455/A 题意: 给出n个元素,让我们来挑选,如果选了 \(a_k\),获得\(a_k\)点数,同时与\(a_{k ...

  4. 二、mongo集群搭建

    系列导航 一.linux单机版mongo安装(带密码验证) 二.mongo集群搭建 三.java连接mongo数据库 四.java对mongo数据库增删改查操作 五.mongo备份篇 mongoexp ...

  5. Vue和Android交互,Android回调Vue的方法

    https://blog.csdn.net/Zhizhiwei/article/details/80425204 Android webview 与 js(Vue) 交互 https://blog.c ...

  6. 2023是AI爆发的元年,程序员赚钱的机会来了,附49个机会!

    以下是程序员利用AI做代码生成的赚钱思路.方案,共49条,按照不同分类列出: 基于自然语言生成的机会: 1. 开发基于AI的自动生成代码软件,应用于网站开发.移动应用开发.家庭自动化.人工智能等各个领 ...

  7. Feign源码解析7:nacos loadbalancer不支持静态ip的负载均衡

    背景 在feign中,一般是通过eureka.nacos等获取服务实例,但有时候调用一些服务时,人家给的是ip或域名,我们这时候还能用Feign这一套吗? 可以的. 有两种方式,一种是直接指定url: ...

  8. Makefile中的+=、:=、?=

    1.= "="是最普通的等号,然而在Makefile中确实最容易搞错的赋值等号,使用"="进行赋值,变量的值是整个makefile中最后被指定的值.不太容易理解 ...

  9. phpcms - 获取单网页 , 例如关于我们

       {pc:get sql="select * from phpcms_page where catid=2" num="1"}         {loop  ...

  10. STM32CubeMX教程23 FSMC - IS62WV51216(SRAM)驱动

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...