【排序用法】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  8. 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  9. 【查询基础】.NET开源 ORM 框架 SqlSugar 系列

💦万丈高楼平地起,做开发想要技术精进,必须要有扎实的基础功底。基础SQL查询语法一定要牢记于心,才能应对后面更为复杂的形势。

1、OrderBy位置

1.1 Select 前面

cs 复制代码
var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.OrderBy((st,sc)=>st.SchoolId)//写Select前面用法,正常都这么用
.Select((st,sc)=>new Dto(){ id=it.id ,Name=it.Name})
.ToList();

1.2 Select 后面

💥区别:特殊用法需要写在Select后面,比如Select中有计算列

cs 复制代码
var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.Select((st,sc)=>new Dto(){ NewNum=st.Num+st.num2,Name=it.Name})
.MergeTable()//需要加上MergeTable对Select后的对象进行排序
.OrderBy(it=>it.NewNum)
.ToList();

2、多列排序

方式1: 逗号隔开 id asc ,name desc

方式2: 链式写法Orderby().Orderby()

cs 复制代码
OrderBy(it=>new {  it.Id, name=SqlFunc.Desc(it.Name) }).ToList();
//id asc ,name desc
 
//也可以多个OrderBy
OrderBy(it=> it.Id).OrderBy(it=> SqlFunc.Desc(it.Name))

3、联表排序

cs 复制代码
var list = db.Queryable<Student>().LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.OrderBy(st=>st.Id)//升序
.OrderBy((st,sc)=>sc.Id,OrderByType.Desc)//写Select前面,写后面看标题1
.Select<ViewModelStudent>().ToList();
// order by st.id, sc.id desc  多级排序

💥注意:如果存在select一定要扔在select前面,不然 st sc别名拿不到

4、动态排序

4.1 字符串排序

💥注意:

  • OrderByPropertyName 需要实体查询
  • OrderBy 都可以
cs 复制代码
//1.Sql字符串,可以防止低级成本注入,支持自定义重写SQL注入验证StaticConfig.Check_FieldFunc重写这个委托方法就可以
var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.OrderBy("st.id asc,sc.Id desc ") //这种就是填SQL你SQL什么样就是什么样 建议看4.2用法
.Select<ViewModelStudent>().ToList();
//技巧可以通过方法转转拿到真实列名:EntityMaintenance.GetDbColumnName<Order>("Id") 100%防注入
 
//2.属性名排序 ,100%防注入,他会根据类中的名字去验证是否存在,不存在就报错
var list= db.Queryable<Student>().OrderByPropertyName("Id")
           .Toist();//有实体才能用这个,没有实体不能用这个
 
//3.使用合并表排序                       
var list =db.Queryable<Student>()
.LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
.Select(it=>new {....})
.MergeTable()
.OrderByPropertyName("Id") //100%防注入,这样的好处可以去掉SQL的别名,适合多表排序
.ToList();

4.2 集合方式排序

cs 复制代码
//新功能推荐
List<OrderByModel> orderList = OrderByModel.Create(  
new OrderByModel(){ FieldName="id",OrderByType=OrderByType.Desc},                     
new OrderByModel(){  FieldName="name"} //默认防注入:并且可以用StaticConfig.Check_FieldFunc重写验证机质
);     
var list=db.Queryable<Student>().AS("order").OrderBy(orderList).ToList();    
 
//技巧:获取类中字段名
 FieldName=db.EntityMaintenance.GetDbColumnName<Order>("Id");//100%防注入

4.3 多表去别名

cs 复制代码
var pageJoin = db.Queryable<Student>()
                .LeftJoin<School>((st, sc) =>st.SchoolId==sc.Id)
                .Select((st, sc) => new {
                 id = st.Id,
                 name = sc.Name
              })
.MergeTable()//将查询结果集变成表MergeTable
.Where(it => it.id == 1).OrderBy("name asc").ToList();//对表MergeTable进行排序

生成的Sql相当于

cs 复制代码
select *  
from 
     (select st.id as id,sc.name as name from xx join xx on ... ) MergeTable  
     --多表已经变成了单表
      where id=@id
      order by ("name asc")

所以单条查询是不需要加前缀的,上面的例子把多表转成了单表操作

5、随机排序取10条

cs 复制代码
db.Queryable<Student>().Take(10).OrderBy(st=>SqlFunc.GetRandom()).ToList(); //随机获取数据

6、OrderByIF

cs 复制代码
OrderByIF(IsOrderBy, it=>it.Id) //当条件IsOrderBy成立.OrderBy才生效

7、ThenBy

💥注意:SqlSugar中没有ThenBy 直接写2次OrderBy就行了

8、取最新10条

cs 复制代码
db.Queryable<Student>().Take(10).OrderBy(st=>SqlFunc.Desc(it.CreateTime)).ToList(); //order by createtime desc
 
//也可以用这个重载
.OrderBy(it=>it.CreateTime,OrderByType.Desc)
相关推荐
Tongpao_SSDHDD5 小时前
希捷酷鹰ST6000VX008实测解析:中小安防监控高性价比存储方案
大数据·数据库·人工智能
蓝鸟19745 小时前
Oracle超大DMP备份文件瘦身、日志精简、磁盘空间优化实战方案日志
数据库·oracle·数据库运维·生产运维实战·oracle避坑·磁盘空间优化·oracle日志清理
金融支付架构实战指南5 小时前
CQRS + 命令模式 + 事件驱动 + 数据库持久化
数据库·ddd·命令模式·领域驱动模型
sevenll076 小时前
DocKit agentic MongoDB GUI 客户端 - 用自然语言和你的数据对话
数据库·mongodb·nosql·agent·桌面客户端
团象科技6 小时前
从一线实操案例拆解不同出海团队落地海外VPS运维独立站的路径细节
大数据·数据库·人工智能
小马爱打代码6 小时前
框架 - 组件 - 中间件:生产级参数配置指引
数据库·中间件
asdfg12589636 小时前
一文通俗理解JDBC中的核心概念+案例
java·数据库·oracle·jdbc
点灯小铭7 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
小陈phd7 小时前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习
霸道流氓气质7 小时前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云