1. SqlSugar多表查询实战解析
在数据库操作中,单表查询是最基础的操作,但实际业务场景往往需要关联多个表获取数据。SqlSugar作为.NET平台优秀的ORM框架,提供了强大的多表查询支持。下面我将结合多年项目经验,详细解析SqlSugar的多表查询实现方式。
1.1 多表连接基础实现
SqlSugar提供了多种多表查询方法,最基础的是通过Queryable<T, T2>方法:
csharp复制var query = context.Client.Queryable<Person, Employee>((pr, em) => new object[]
{
JoinType.Left,
em.PersonId == pr.Id
});
这段代码实现了Person和Employee表的左连接查询。其中:
- JoinType.Left指定连接类型为左连接
- em.PersonId == pr.Id定义了连接条件
- 返回的是ISugarQueryable接口,可以继续链式调用其他查询方法
实际开发中,我建议将连接条件提取为常量或变量,避免在多个地方重复编写相同的连接条件,这样既减少出错概率,也便于后期维护。
1.2 多表查询的四种实现方式
SqlSugar提供了四种多表查询方式,各有适用场景:
方式一:基础连接查询
csharp复制var query = context.Client.Queryable<Person, Employee>((pr, em) => new object[]
{
JoinType.Left,
em.PersonId == pr.Id
});
特点:
- 语法简洁
- 适合简单的两表连接
- 需要显式指定连接类型
方式二:基于已有查询的连接
csharp复制var personQuery = context.Client.Queryable<Person>();
var employeeQuery = context.Client.Queryable<Employee>();
var query = context.Client.Queryable(personQuery, employeeQuery,
(pr, em) => pr.Id == em.PersonId);
特点:
- 可以对已有查询进行连接
- 默认使用内连接
- 适合需要对单表先进行筛选再连接的场景
方式三:指定连接类型的查询
csharp复制var query = context.Client.Queryable(
context.Client.Queryable<Person>(),
context.Client.Queryable<Employee>(),
JoinType.Left,
(pr, em) => pr.Id == em.PersonId);
特点:
- 可以自由指定连接类型
- 结合了前两种方式的优点
- 适合复杂查询场景
方式四:简化版连接查询
csharp复制var query = context.Client.Queryable<Person, Employee>(
(pr, em) => pr.Id == em.PersonId);
特点:
- 语法最简洁
- 默认使用内连接
- 适合快速开发场景
1.3 多表查询的性能优化
在实际
