首页 > 数据库 >SqlSugar删除数据

SqlSugar删除数据

时间:2024-01-16 15:13:33浏览次数:32  
标签:删除 Deleteable ExecuteCommand db new 数据 Id 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 { 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();

 

标签:删除,Deleteable,ExecuteCommand,db,new,数据,Id,SqlSugar
From: https://www.cnblogs.com/yswenli/p/17967698

相关文章

  • 数据库高可用方案
    MySQL高可用架构MySQL高可用架构主要包括:主从复制(Master-SlaveReplication):通过将主数据库的更改同步到一组从数据库来实现高可用性。当主数据库宕机时,从数据库可以被提升为新的主数据库。主主复制(Master-MasterReplication):两个或多个主数据库相互同步,每个主数据库都可以处理......
  • SqlSugar基础查询
    查所有List<Student> list=db.Queryable<Student>().ToList()//select * from Student查询总数int count=db.Queryable<Student>().Count()//select count(1) from Student按条件查询db.Queryable<Student>().Where(it=>it.Id......
  • SqlSugar分组查询
    一、分组查询和使用1.1语法只有在聚合对象需要筛选的时候才会用到Having,一般分组查询用不到可以去掉  var list = db.Queryable<Student>()             .GroupBy(it => new { it.Id, it.Name }) //可以多字段             .Whe......
  • SqlSugar分页查询
    同步分页 int pagenumber= 1; // pagenumber是从1开始的不是从零开始的 int pageSize = 20; int totalCount=0; //单表分页 var page = db.Queryable<Student>().ToPageList(pagenumber, pageSize, ref totalCount); //如果SqlServer不想有Rownumb......
  • SqlSugar联表查询
    Join用法语法糖1、2和3在WhereOrderByGroupBySelect用法都一样的,他们区别就在JOIN的方式不一样,其它都一样语法糖1  优点:好理解,5个表以内的联表非常爽,支持功能全缺点: 联表超过5个以上的表后(x,b,c...) 会比较难看,语法糖2可以弥补表和表的左连接  新语法糖 5.0.......
  • 使用shell脚本xtrabackup自动恢复MySQL数据库
    【背景说明】按照安全的一些要求,需要定期对数据库进行恢复演练操作【环境说明】MySQL5.7的xtrabackup全库xbstream的加密备份(如果不是流备份跟加密,去掉相关参数)【脚本说明】v_backupdir="/mysqlbackup/recovery/yiyuan"备份文件的目录路径v_dir="/mysqlbackup/recovery/......
  • js将数据转为菜单,一个for?
    letdata=[{id:'02',lable:'产品leader',pid:'01'},{id:'03',lable:'UIleader',pid:'01'},{id:'07',lable:'产品经理',pid:'02'},{id......
  • SqlSugar入门
    SqlSugar入门创建对象你可以使用SqlSugarClient(new模式)或者 SqlSugarScope(单例) 对数据库进行增、删、查、改等功能注意:除了名字和使用模式不同,功能和API都一模一样SqlSugarClient(new模式)优点:性能比SqlSugarScope有5%左右提升缺点:db不能跨上下文使用,需要new......
  • 处理跨域请求的API接口数据
     在Web开发中,跨域请求是一个常见的问题。由于浏览器的安全策略限制,JavaScript在发送HTTP请求时只能访问同源下的资源,即协议、域名、端口号都必须一致。然而,有时我们需要从不同域名下获取数据,这就涉及到了跨域请求的问题。为了解决这个问题,我们可以使用API接口来处理跨域请求。......
  • 数据库分库分表
    何时分库分表数据库性能出现问题后,一般按照如下步骤优化:①参数优化②缓存、索引③读写分离④分库分表(最终方案)分库服务器磁盘空间不足、内存不足、CPU压力过大,导致读写性能瓶颈。网络带宽不足,响应慢,导致客户端连接等待/超时。数据量过大,影响读写性能;MySQL单库......