SqlSugar应用
部分更新只更新指定的字段_db.UpdateableTraDianHuaTongZhi().SetColumns(xnew{UpdateTimeDateTime.Now},true)// 添加true 自动更新修改审计.Where(xx.Id456).ExecuteCommand();_db.UpdateableTraDianHuaTongZhi().SetColumns(xx.UpdateTimeDateTime.Now)// 不支持自动更新审计.Where(xx.Id123).ExecuteCommand();// 以上两种写法等价//使用仓储, 方法1_rep.AsUpdateable(obj).UpdateColumns(itnew{it.IsDelete,it.UpdateTime,it.UpdateUserId}).ExecuteCommand();//方法2_rep.Update(unew(){IsDeleteTrue},uu.Idid);实体自动映射到dtodb.QueryableAbpUser().SelectAbpUsersDto();//实体自动映射到dto手动指定部分列的映射规则[SugarTable(AbpUsers)]publicclassAbpUser{publicintId{get;set;}publicstringUserName{get;set;}//用户名publicstringSurname{get;set;}//昵称publicstringEmailAddress{get;set;}}publicclassAbpUsersDto{publicintUserNameLength{get;set;}publicintEmailAddressLength{get;set;}publicstringSurname{get;set;}}db.QueryableAbpUser().Select(itnewAbpUsersDto(){UserNameLengthit.UserName.Length,//手动指定映射规则EmailAddressLengthit.EmailAddress.Length////手动指定映射规则},true)//其余字段自动映射//产生的脚本如下SELECTLEN([UserName])AS[UserNameLength],LEN([EmailAddress])AS[EmailAddressLength],[Surname]AS[Surname]FROM[AbpUsers]根据LeftJoin的别名自动映射[SugarTable(InvOutBill)]publicclassInvOutBill{publicstringBillNo{get;set;}publicintCreatedUserId{get;set;}}publicclassInvOutBillDto{publicstringBillNo{get;set;}publicstringCreateUserName{get;set;}//创建者账号根据LeftJoin的别名自动映射}db.QueryableInvOutBill().LeftJoinAbpUsers((i,Create)i.CreatedUserIdCreate.Id).SelectInvOutBillDto()把Where放最后// 正确写法_db.QueryableSysUser().InnerJoinSysOrg((a,b)a.OrgIdb.Id).Where((a,b)a.Accountadmin).Select((a,b)new{a.Account,a.RealName,a.NickName,OrgNameb.Name}).First();// 错误写法, 生成的SQL非预期_db.QueryableSysUser().Where((a)a.Accountadmin).InnerJoinSysOrg((a,b)a.OrgIdb.Id).Select((a,b)new{a.Account,a.RealName,a.NickName,OrgNameb.Name}).First();批量插入// 使用仓储, 推荐_rep.InsertRange(list)// 使用db , 方案1db.Insertable(list).ExecuteCommand()// 使用db , 方案2foreach(varitemininput.MingXiList){item.IdYitIdHelper.NextId();//批量插入要提前产生主键item.MasterIdid;// 主表Id}db.BulkCopy(input.MingXiList);报表查询 Reportablehttps://www.donet5.com/Home/Doc?typeId2315实践零、 行转列实践一、 对象和表随意JOIN实践二、 统计某月每天的数量实践三、按月统计没有为0实践四、 List和表随意JOIN实践五、大数据处理实践六、每10分钟统计Count实践七、 每个ID都要对应时间批量更新通过字典集合实现多记录同时更新// 批量根据Id更新SequencepublicboolUpdateSequences(SequencesInputinput){vardtListnewListDictionarystring,object();foreach(varitemininput.Items){vardtnewDictionarystring,object();dt.Add(id,item.Id);dt.Add(Sequence,item.Sequence);dtList.Add(dt);}vart666_rep.Context.Updateable(dtList).AS(QueTemplateQuestion).WhereColumns(Id).ExecuteCommand();returntrue;}生成的脚本如下UPDATESSETS.[Sequence]T.[Sequence]FROM[QueTemplateQuestion]SINNERJOIN(SELECT541524708270149AS[id],1AS[Sequence]UNIONALLSELECT541525189718085AS[id],3AS[Sequence])TONS.[Id]T.[Id]null 与 空如果数据库字段设计为非null, 可以这样写, 性能最好_db.QueryableTraDianHuaTongZhi().Where(xx.dianHua!).Select(xx.Id).First();否则, 字符串不为空判断推荐写法: .Where(x x.title.Length 0)LINQ :_db.QueryableTraDianHuaTongZhi().Where(xx.dianHua.Length0).Select(xx.Id).First();生成sql如下SELECTIdFROMTraDianHuaTongZhiWHERELENGTH(dianHua)0分组聚合查询某用户每个项目的总分值varlistQueryable.InnerJoinTable2((it,b)it.XiangMuIdb.Id).GroupBy((it,b)new{b.XiangMu}).WhereIF(input.UserId0,itit.CreateUserIdinput.UserId).Select((it,b)new{FenZhiSqlFunc.AggregateSum(it.FenZhi),XiangMub.XiangMu}).ToList();两次分组聚合先求各部门内每个用户的总分值, 再求每个部门的平均分值varsubQuery_rep.Context.QueryableSysOrg,SysUser,Table3((o,u,k)newJoinQueryInfos(JoinType.Inner,o.Idu.OrgId,JoinType.Inner,k.CreateUserIdu.Id)).GroupBy((o,u,k)new{o.Id,o.Name,uIdu.Id}).Select((o,u,k)new{o.Id,o.Name,uidu.Id,FenZhiSqlFunc.AggregateSum(k.FenZhi)});varlist_rep.Context.Queryable(subQuery).GroupBy(anew{a.Id,a.Name}).Select(anew{Ida.Id,Namea.Name,FenZhiSqlFunc.AggregateAvg(a.FenZhi)}).ToList();对应SQLSELECTa.Id,a.[Name],avg(a.FenZhi)ASFenZhiFROM(SELECTo.Id,o.[Name],u.IdASuid,sum(k.FenZhi)ASFenZhiFROMSysOrg oINNERJOINSysUser uONu.OrgIdo.IdINNERJOINTable3 kONk.CreateUserIdu.IdGROUPBYo.Id,o.[Name],u.Id)aGROUPBYa.Id,a.[Name]