原创

Dos.ORM使用方法 - Delete删除操作

 30136  2015/08/02 00:00:00

car_5

【重要提示】v1.9.9.0更新:

.Delete<T>() 删除方法,如果没有传入删除条件,会抛出异常:

“请传入删除条件,若您想删除整表数据,请使用.DeleteAll<T>()方法”。

当然,你也可以不使用.DeleteAll<T>(),通过DB.Context.Delete<T>(d => 1 == 1)或(d => true)来删除整表数据。


创建DbSession对象:

public class DB
{
    public static readonly DbSession Context = new DbSession("DosConn");
}

根据主键值删除单条数据:

//SQL语句:DELETE FROM table WHERE id=1
var count = DB.Context.Delete<table>(d => d.id == 1);
//或者简写:
var count = DB.Context.Delete<table>(1);
//同样也适用于Guid主键类型
var count = DB.Context.Delete<table>(d => d.id == Guid.Parse("..."));
//简写:
var count = DB.Context.Delete<table>(Guid.Parse("..."));

根据主键值批量删除数据:

//SQL语句:DELETE FROM table WHERE id IN(1,2,3)
var ids = new List<int>();
ids.Add(1);
ids.Add(2);
ids.Add(3);
var count = DB.Context.Delete<table>(d => d.id.In(ids));
//也可以这样写:
var count = DB.Context.Delete<table>(d => d.id.In(1,2,3));

根据实体删除单条数据:

//SQL语句:DELETE FROM table WHERE id=1
var model = DB.Context.From<table>().First();
if(model == null)
{
    return "不存在要删除的数据";
}
//会根据主键自动添加where条件:WHERE id=model.id
var count = DB.Context.Delete<table>(model);
//同以下写法:
var count = DB.Context.Delete<table>(d => d.id == model.id);

根据实体批量删除数据:

//SQL语句:DELETE FROM table WHERE id IN(1,2,3)
var list = DB.Context.From<table>().ToList();
//批量删除方法内部有事务,会自动添加where条件:WHERE id IN(list主键数据)
var count = DB.Context.Delete<table>(list);
//同以下写法:
var ids = list.Select(d => d.id).ToList();
var count = DB.Context.Delete<table>(d => d.id.In(ids));

子查询条件删除

//SQL语句:DELETE FROM table WHERE id IN
//    (SELECT id FROM table WHERE name='ITdos')
var count2 = DB.Content.Delete<table>(table._.id.SubQueryIn(
    DB.Content.From<table>().Select(d => d.id).Where(d => d.name == "ITdos")
));