【查询基础】.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();
相关推荐
计算机魔术师5 小时前
【AI面试八股文 Vol.1.3:ReAct】ReAct 不是一种算法,是一种工程契约:从问题域到面试追问的完整映射
开源
Vane15 小时前
五一假期无聊?我用 Rust 手搓了一个并发下载器
开源
rockey6276 小时前
AScript之eval函数详解
c#·.net·script·eval·expression·动态脚本
该昵称用户已存在7 小时前
从边缘计量到碳足迹追踪:MyEMS 开源一体化架构的全栈拆解
架构·开源
xmdy58668 小时前
Flutter+开源鸿蒙实战|智安盾电商溯源平台Day1 项目搭建与整体方案拆解
flutter·开源·harmonyos
该昵称用户已存在8 小时前
以开源筑基,架构先行——深度拆解 MyEMS 微服务能源管理系统的技术内核
微服务·架构·开源
Hommy8810 小时前
【开源剪映小助手】字幕接口
开源·github·aigc·剪映小助手·视频剪辑自动化
乱世刀疤12 小时前
cc-witch-web,已开源!实现OpenClaw、Claude Code等Agent的大模型便捷快速切换
人工智能·开源
Python私教13 小时前
Pure-Admin-Thin 深度解析:完整版和精简版到底怎么选?
vue.js·人工智能·开源