一、导语
1.SqlSugar是什么?
SqlSugar是一款轻量级ORM框架,专门用于.Net平台,提高开发效率,简化数据库操作。
2.为什么要使用SqlSugar?
①高性能:在大数据量的插入和查询操作中,SqlSugar的性能明显高于其他ORM框架。
②高扩展性:支持自定义Lamada函数解析、扩展数据类型、支持自定义实体特性、外部缓存等。
③数据库支持:支持多种数据库,包括关系型数据库、时序数据库、列式存储库等。
3.怎么使用SqlSugar?
Nuget包管理下载:工具——Nuget包管理器——管理解决方案的Nuget程序包
二、查询
1.单表查询
var GetAll = db.Queryable<实体>().ToList();//查询所有数据
var GetId = db.Queryable<实体>().First(a=>a.Name = 实体.Name);//根据Id查询单条数据
var GetPrimaryKey = db.Queryable<实体>().Insingle(2);//根据主键查询数据
var sum = db.Queryable<实体>().Sum(a=>a.Id);//查询Id总和
var IsAny = db.Queryable<实体>().where(a=>a.Id).Any();//查询是否存在
var GetRenameList = db.Queryable<实体>().As("表别名").ToList();//等同于select * from 表别名
var list = db.Queryable<实体>().where(i=>i.Name.Contains(实体.Name)).ToList();//模糊查询
var ListWhereIf = db.Queryable<实体>()
.whereIF(!string.IsNullOrWhiteSpace(实体.Name),i=>i.Name.Contains(实体.Name));
RefAsync<int> total = 0;
db.Queryable<实体>().ToPageListAsync(pageIndex,pagesize,total);//异步分页查询
var query1 = db.Queryable<实体>()
.Select(i=>new model{
Name = i.Name
});
var query2 = db.Queryable<实体>()
.Select(i=>new model{
Name = i.Name
});
var list = db.UnionAll(query1,query2).ToList();//并集查询
//1.Where和WhereIF的区别:
//WhereIF就是满足特定条件的时候才会执行查询条件
//2.IsNullOrWhiteSpace和IsNullOrEmpty的区别:
//IsNullOrWhiteSpace通常检查string字符串是否为null或者是否仅包含空白字符(空格、换行符等等)。
//IsNullOrEmpty通常检查string字符串是否为null或者为空的时候。
//3.Insingle适用于匹配一组值的语句查询
2.联表查询
var query = db.Queryable<实体>()
.LeftJoin<实体>((a,b)=>a.P_Id == b.P_Id)
.LeftJoin<实体>((a,b,c)=>a.P_proCode == c.P_proCode)
.Select((a,b,c)=>new 实体
{
P_Name = a.P_Name,
P_Price = a.P_Price,
P_InteName = b.P_InteName,
P_Goods = c.P_Goods
});//联表查询
三、增加
//1.根据实体插入数据
db.Insertable(value).ExecuteCommand();//同步方式
await db.Insertable(value).ExecuteCommandAsnyc();//异步方式
//2.根据字典插入
var value = new Dictionary<string,object>();
dt.Add("name","value1");
dt.Add("sex","value2");
db.Insertable(value).ExecuteCommandAsnyc();
//3.不插入某列
db.Insertable(value).IgnoreColumns(i=>new
{
i.Name,i.Sex
}).ExecuteReturnIdentity();
//4.只添加某一列字段数据
db.Insertable(value).InsertColumns(i=>new
{
i.Name,
i.Sex
}).ExecuteReturnIdentity();
//ExecuteReturnIdentity-返回自增列
//IgnoreColumns-忽略某一列
//5.忽略为空的字段
db.Insertable(value).IngnoreColunms(ignoreNullColumn:true).ExecuteCommandAsnyc();
//6.大数据插入
db.Insertable(value).UseSqlServer().ExecuteBlueCopy();
四、修改
//1.根据主键更新单条数据
var result = db.Updateable<实体>()
.ExecuteCommand();
//2.忽略某些字段的更新数据
var result = db.Updateable(value)
.IgnoreColumns(i=>new
{
i.Name,
i.UserId
}).ExecuteCommand();
//3.只更新某些字段的值
var result = db.Updateable(value)
.UpdateColumns(i=>new
{
i.Name,
i.Sex
}).ExecuteCommand();
//4.只更新不为null的字段的值
db.Updateable(value)
.IgnoreColumns(ignoreAllNullColumns:true).ExecuteCommand();
//5.根据表达式更新
await db.Updateable<实体>()
.SetColumns(u=>u.F_Name == 实体.F_Name)
.SetColumns(u=>u.F_Date == 实体.F_Date)
.SetColumnsIF(实体.F_Status==1,u=>u.F_CloseDate == DateTime.Now)//如果状态为1的时候,设置关闭时间为当前时间
.Where(u=>u.F_Id == 实体.F_Id)
.ExecuteCommandAsync();
五、删除
//1.根据实体删除数据
db.Deleteable<实体>()
.Where(new Student()
{
Id = 实体.Id
}).ExecuteCommand();
//2.根据表达式删除数据
db.Deleteable<实体>()
.Where(i=>i.Id == 实体.Id)
.ExecuteCommand();
//3.子查询删除
db.Deleteable<实体>()
.Where(p=>p.Id == SqlFunc.Subqueryable<实体>()
.Where(s=>s.Id == p.Id).Select(s=>s.Id))
.ExecuteCommand();
//4.除最新几条删除
int Num = 10;
var Records = db.OrderMaps
.Take(Num)
.Select(i=>i.Id)
.ToList();//获取最新的几条的记录
db.OrderMaps.Where(i=>!Records.Contains(i.Id)).Delete();//删除最新的几条之外的数据记录
六、原生Sql操作
//1.调用存储过程
db.Ado.UseStoredProcedure().存储过程
var res = db.Ado.UseStoredProcedure()
.GetDataTable("sp_Class",new{name="学前1班",type="大班"});
//2.调用Sql
var dt = db.Ado.GetDataTable("select * from 表名 where id=@id and name=@name",
new{id=1,name=2});
var dt = db.Ado.GetDataTable("select * from 表名 where id=@id and name=@name",new List<SugarParameter>(){
new SugarParameter("@id",1),
new SugarParameter("@name",2)
});