普通删除 、单表删除、表达式删除 用法

1、根据实体删除

1.1 强类型实体

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

//单个实体
db.Deleteable<Student>().Where(new Student() { Id = 1 }).ExecuteCommand();

//List<实体> (可以不加Where)
List<Student> list=new List<Student>(){
  new Student() { Id = 1 }
};
db.Deleteable<Student>(list).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)

请升级到5.0.4.9+,(5.0.4.3存在BUG)

实体属性有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",DateTime.Now,"UpdateTime");

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

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

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



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

文档:SqlSugar5.0