【查询基础】.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查询语法一定要牢记于心,才能应对后面更为复杂的形势。

01. 查所有字段

cs 复制代码
List<Student> list=db.Queryable<Student>().ToList()
//select * from Student

02. 查询总数

cs 复制代码
int count=db.Queryable<Student>().Count()
//select count(1) from Student

03. 按条件查询

cs 复制代码
db.Queryable<Student>().Where(it=>it.Id==1).ToList()
//select * from Student where id=1
 
db.Queryable<Student>().Where(it=>it.name !=null).ToList()//不是null
//select * from Student where name is not null
 
db.Queryable<Student>().Where(it=>it.name ==null).ToList()//是null
//select * from Student where name is null
 
db.Queryable<Student>().Where(it=>it.name !="").ToList()//不是空 ,不为空
//select * from Student where name <> ''

04. 多条件查询

cs 复制代码
db.Queryable<Student>().Where(it=>it.Id>10&&it.Name=="a").ToList()
//select * from Student where id>10 and name='a'
db.Queryable<Student>().Where(it=>it.Id>10).Where(it=>it.Name=="a").ToList()
//select * from Student where id>10 and name='a'
//如果是或者关系可以用 ||

05. 动态OR查询

cs 复制代码
var exp= Expressionable.Create<Student>();
exp.OrIF(条件,it=>it.Id==1);//.OrIf 是条件成立才会拼接OR
exp.Or(it =>it.Name.Contains("jack"));//拼接OR
var list=db.Queryable<Student>().Where(exp.ToExpression()).ToList();

06. 模糊查询

cs 复制代码
db.Queryable<Student>().Where(it =>it.Name.Contains("jack")).ToList();
//select  * from  Student where name like %jack%

07. 根据主键查询

cs 复制代码
/*单主键查询*/
db.Queryable<Student>().InSingle(2) //通过主键查询 SingleById
db.Queryable<Student>().Single(it=>it.Id==2) //根据ID查询
//select * from Student where id=2
 
 
/*多主键查询*/
var getAll=db.Queryable<Order>().WhereClassByPrimaryKey(new Order(){Pk1=1,Pk2=xx}).ToList(); //单个实体  
vargetAll=db.Queryable<Order>().WhereClassByPrimaryKey(List<Order>).ToList(); //支持集合

08. 查询第一条 ,第一行

.First() 等同于C#中的 FirstOrDefault , 没有值返回 null

cs 复制代码
db.Queryable<Student>().First(it=>it.Id==1) //没有返回Null
//select top 1 * from Student where id=1

09. 查询最后一条

First() 等同于C#中的 FirstOrDefault , 没有值返回 null

cs 复制代码
db.Queryable<Student>()
.OrderBy(it=>it.Id,OrderByType.Desc )// 倒序
.First(it=>it.Id>10) //没有返回Null
//select top 1 * from Student order by id desc where id>10

10. 查前几条

cs 复制代码
db.Queryable<Student>().Take(10).ToList()
//select top 10 * from Student

11. 数据行数

cs 复制代码
db.Queryable<Student>().Where(it=>it.Id>11).Count()//同步
db.Queryable<Student>().Where(it=>it.Id>11).CountAsync()//异步
//select count(*) from Student where id>11
//你也可以用函数
SqlFunc.AggregateCount

12. 设置新表名

cs 复制代码
//例1:更新表名
db.Queryable<School>().AS("Student").ToList();
//生成的SQL  SELECT [ID],[NAME] FROM  Student
//动态表名 表别名 指定表明
 
 
//例2:给表名添加前缀
db.Queryable<School>().AS("dbo.School").ToList();
//生成的SQL  SELECT [ID],[NAME] FROM  dbo.School
 
 
//如果不用AS也可以在特性中设置别名,看文档:实体本置

13. 是否存在记录

is exists

cs 复制代码
db.Queryable<Student>().Where(it=>it.Id>11).Any()
db.Queryable<Student>().Any(it=>it.Id>11) //上面语法的简化
//异步就是 AnyAsync()

14. In查询(单个字段)

单个字段

cs 复制代码
int [] allIds =new int[]{2,3,31};
db.Queryable<OrderItem>().Where(it => allIds.Contains(it.OrderId)).ToList()
//orderid in (2,3,31)
//支持超过 1000以上,只要数据库不慢没有上限
 
//字符串类型 varchar和nvarchar (默认varchar来保证性能)
 NameList.Contains(it.Name,true) //true和false来控制是varchar还是nvarchar

15. In查询(多个字段)

多个字段 (升级:5.1.4.67-preview04)

cs 复制代码
 List<OrderItem> list=xxx;
 db.Queryable<OrderItem>().Where(it => list.Any(s => s.Id == it.Id && s.Name == it.Name))
 //也可以用动态表达式拼OR实现

16. In模糊查询

对象集合In like 升级:5.1.4.67

cs 复制代码
 List<OrderItem> list=xxx;
 db.Queryable<OrderItem>().Where(it => list.Any(s => it.Name.Contanins(s.Name)))
 //也可以用动态表达式拼OR实现

数组集全 in like :5.1.4.85

cs 复制代码
 List<string> list=xxx;
 db.Queryable<OrderItem>().Where(it => list.Any(s => it.Name.Contanins(s)))
 //也可以用动态表达式拼OR实现

17. Not In

cs 复制代码
int [] allIds =new int[]{2,3,31};
db.Queryable<OrderItem>().Where(it => !allIds.Contains(it.OrderId)).ToList()
//orderid  NOT in (2,3,31)

18. 简单排序

cs 复制代码
db.Queryable<Student>().OrderBy((st,sc)=>sc.Id,OrderByType.Desc).ToList()
//排序 可以多个
//更多用法
https://www.donet5.com/Home/Doc?typeId=2312

19. 查询单条

查询一条

cs 复制代码
db.Queryable<Student>().Single(it=>it.Id==1) //没有返回Null,如果结果大于1条会抛出错误
//select * from Student where id=1 // 查询id等于1的单条记录

20. 获取最大值

cs 复制代码
db.Queryable<Order>().Max(it=>it.Id);//同步 
db.Queryable<Order>().MaxAsync(it=>it.Id);//异步
//也可以用函数 SqlFunc.AggregateMax

21. 获取最小值

cs 复制代码
db.Queryable<Order>().Min(it=>it.Id);//同步
db.Queryable<Order>().MinAsync(it=>it.Id);//异步
//也可以用函数 SqlFunc.AggregateMin

22. 求和

cs 复制代码
db.Queryable<Order>().Sum(it=>it.Id);//同步
db.Queryable<Order>().SumAsync(it=>it.Id);//异步
//也可以用函数 SqlFunc.AggregateSum

23. 平均值

cs 复制代码
db.Queryable<Order>().Avg(it=>it.Id);//同步
db.Queryable<Order>().AvgAsync(it=>it.Id);//异步
//也可以用函数 SqlFunc.AggregateAvg

24. 查询过滤排除某一个字段

生成的sql Select 不会有Files

cs 复制代码
  
/***单表***/
db.Queryable<Order>().IgnoreColumns(it=>it.Files).ToList();//只支持单表查询
  
  
/***联查***/
//是主表
var leftQuery=db.Queryable<Order>().IgnoreColumns(it=>it.Files);
var list=db.Queryable(leftQuery).LeftJoin<OrderDetails>((o,d)=>o.id==d.orderid).Select(o=>o).ToList();    
 
//是Join的表
var rightQuery= db.Queryable<OrderItem>().IgnoreColumns(it=>it.Files);
var list=db.Queryable<Order>().LeftJoin(rightQuery,(o,d)=>o.Id == d.OrderId).Select(o=>o).ToList();
相关推荐
️公子6 小时前
DeepSeek V4.1 Flash 今日接管 Pro 流量:552B MoE + 非对称架构,Agent 推理成本怎么砍?
架构·开源·大模型·api·agent·deepseek
小羊没烦恼!6 小时前
Memory 记忆设计讨论:Agent Memory 的安全边界:权限、删除、版本与回执
java·大数据·word·powerpoint·.net
郝学胜-神的一滴6 小时前
C++20模板元编程 01:从零吃透模板核心底层逻辑
开发语言·c++·vscode·程序人生·开源
GPUStack7 小时前
GPUStack 部署实战:8 卡 H20 跑通 GLM-5.3-Flash,解锁 512K 长上下文与多模态
人工智能·开源·github
sbjdhjd7 小时前
从兼容路由到任意方法调用:ThinkPHP 5.1.29 RCE 复现与调试复盘 | 06
经验分享·安全·网络安全·数据挖掘·开源·php·rce
进击的雷神7 小时前
Jira 让你适应工具,Kaneo 让工具适应你
开源·jira·kaneo
维核科技7 小时前
开源权重的竞争:模型生态正在被重新洗牌
开源
mmsx8 小时前
MapLibre 实战 09|Bug 单写着"地图被风刮走了":一个瓦片源工厂,是三个线上事故换来的
android·前端·开源
辰域电子8 小时前
STM32项目开源:粮仓环境安防监测系统(代码 + 原理图 + 仿真)
stm32·单片机·嵌入式硬件·开源·毕业设计·proteus
智碳未来科技有限公司8 小时前
深度排查|InfluxDB浮点精度丢失:导致EMS能耗对账偏差的底层根因与生产根治方案
开源·能源管理系统·数字化能碳管理平台·数字化绿色化协同转型·双化协同