var getAll = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.Id==sc.Id) ) .Where(st => st.Id == SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id)) .ToList();
理解问题var getAll = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.Id==sc.Id) ) .Where(st => st.Id == SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id)) .ToList();
已完成理解「var getAll = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(JoinType.Left,st.Id==sc.Id) ) .Where(st => st.Id == SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id)) .ToList();」
展开阅读网页
在您提供的代码片段中,db.Queryable<Student, School>
表示您正在使用 SqlSugar ORM 进行联表查询,其中 Student
和 School
是两个要联结的表。JoinType.Left
指定了联结的类型为左联结,而 st.Id == sc.Id
是联结条件,表示 Student
表中的 Id
字段与 School
表中的 Id
字段相等。
接下来,.Where(st => st.Id == SqlFunc.Subqueryable<School>().Where(s => s.Id == st.Id).Select(s => s.Id))
这一行代码使用了子查询来对结果进行过滤。这里,SqlFunc.Subqueryable<School>()
创建了一个 School
表的查询,.Where(s => s.Id == st.Id)
过滤出 School
表中 Id
与当前 Student
记录的 Id
相等的记录,然后 .Select(s => s.Id)
选择这些记录的 Id
字段。
最后,.ToList()
将查询结果转换为一个列表。
根据您提供的代码片段,这段代码的作用是:从 Student
和 School
表中进行左联结查询,然后过滤出 Student
表中 Id
字段与 School
表中 Id
字段相等的记录,并将这些记录转换为一个列表。然而,这个查询实际上可能不会返回任何结果,因为联结条件已经保证了 st.Id
和 sc.Id
是相等的,所以子查询的使用在这里可能是多余的。356710
如何使用SqlSugar ORM进行多表查询?
SqlSugar ORM 支持多表查询,可以通过 Queryable
方法实现。例如,可以使用 JoinType
来指定连接的类型,并通过 lambda 表达式定义连接条件。以下是一个多表查询的示例代码:
var getAll = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(
JoinType.Left, st.Id == sc.Id))
.Select(st => new { name = st.Name, id = sc.Id })
.ToList();
在这个例子中,Student
和 School
是两个要连接的表,JoinType.Left
表示左连接,st.Id == sc.Id
是连接条件。然后通过 Select
方法指定要返回的字段,最后调用 ToList
方法执行查询并返回结果列表。35671011
SqlSugar ORM支持哪些数据库类型?
SqlSugar ORM 是一个轻量级的 ORM 框架,支持多种数据库类型。根据提供的参考资料,SqlSugar 支持的数据库类型包括:
- MySQL
- SqlServer
- Oracle
- Sqlite
- Postgresql(开发中,预计年后支持)
SqlSugar 旨在简化数据库操作,提高开发效率,适用于 .NET 平台。14151617
SqlSugar ORM的分页查询是如何实现的?
SqlSugar ORM 提供了强大的分页查询功能,可以通过 ToPageList
方法实现。以下是一个分页查询的示例代码:
var p = new PageModel() { PageIndex = 1, PageSize = 10 };
var data = StudentDb.GetPageList(it => it.Name == "xx", p);
Console.WriteLine(p.PageCount); // 返回总数
在这个例子中,首先创建了一个 PageModel
对象,设置了页码 PageIndex
和每页大小 PageSize
。然后调用 GetPageList
方法进行分页查询,传入查询条件和分页参数。执行查询后,可以通过 p.PageCount
获取总页数。此外,还可以通过 OrderBy
方法对结果进行排序。11819
SqlSugar ORM的二级缓存功能是如何使用的?
SqlSugar ORM 的二级缓存功能可以对查询出来的数据进行缓存,减少数据库访问次数,提高性能。以下是二级缓存的使用方法:
- 开启缓存:在查询前,通过
SqlSugarClient
的Cache
属性设置缓存策略。 - 执行查询:执行查询操作,如
Queryable
、ToPageList
等。 - 使用缓存数据:在缓存有效期内,相同的查询操作会从缓存中读取数据,而不是再次访问数据库。
例如,以下代码展示了如何使用二级缓存查询数据:
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql);
};
// 开启缓存
db.Cache<School>.SetExpireTime(3600); // 设置缓存过期时间为1小时
// 查询数据
var list = db.Queryable<School>().ToList();
// 使用缓存数据
var cachedList = db.Cache<School>().GetList();
在这个例子中,首先设置了缓存的过期时间,然后执行了查询操作。之后,可以通过 Cache
属性获取缓存中的数据。12212223
SqlSugar ORM的Mapper功能有哪些用途?
SqlSugar ORM 的 Mapper 功能主要用于实现一对多、多对多等复杂查询,以及自定义扩展。以下是 Mapper 功能的一些用途:
- 一对多查询:使用 Mapper 可以实现一对多的查询,弥补
.Select()
方法的不足,提高查询性能。 - 多Queryable查询:可以同时查询多个表,并将结果合并。
- Union all查询:将两个或多个查询结果集合并。
- 导航查询:处理主对象包含子对象的层级关系查询,简化配置,提高查询效率。
例如,以下代码展示了如何使用 Mapper 进行一对多查询:
var s12 = db.Queryable<Student>()
.Mapper(it => it.Class, (s, c) => s.ClassId == c.Id)
.ToList();
SqlSugar ORM 入门篇2 1 | SqlSugar查询功能介绍 多表查询、分页查询等,实现零SQL操作。 |
简单示例 2 | 基础查询示例 查所有、查单条、聚合函数等基础查询操作。 |
联表查询示例 3 | 联表查询操作 使用JoinType进行多表联查。 |
程序类查询示例 4 | 程序类查询 在类中使用Queryable进行数据查询。 |
多表联查示例 5 | 多表联查 通过JoinQueryInfos实现多表联查。 |
匿名对象查询 7 | 匿名对象查询 将查询结果映射到匿名对象。 |
SqlSugar ORM1 | 内容标题 强大的ORM框架,支持多表查询、分页查询等。 |
DbContext1 | 内容标题 用于处理数据库事务和复杂操作的上下文类。 |
SimpleClient | 内容标题 处理Student表的常用操作的客户端。 |
SimpleClient | 内容标题 处理School表的常用操作的客户端。 |
db3 | 数据库查询对象 用于执行查询操作的数据库对象。 |
Student3 | 学生表 存储学生信息的数据库表。 |
School3 | 学校表 存储学校信息的数据库表。 |
JoinQueryInfos3 | 联表查询信息 用于定义联表查询条件的对象。 |
SqlFunc3 | SQL函数 提供数据库操作的函数集合。 |
Subqueryable3 | 子查询 用于在查询中嵌套另一个查询。 |