逻辑别名表关联
- 两个别名表关联查询
- 联表查询的JOIN ON部分
- 通过关键字And和Or查询
- 本组件是对ShadowSql.Core同名组件的泛型扩展
- 支持对数据表类型特殊处理,增强功能、增加易用性
1. 接口
2. 基类
JoinOnBase
3. 类
- [AliasJoinOnQuery<TLeft, TRight>](xref:ShadowSql.Join.AliasJoinOnQuery<TLeft, TRight>)
4. Join扩展方法
- 从表创建[AliasJoinOnQuery<TLeft, TRight>](xref:ShadowSql.Join.JoinOnQuery<TLeft, TRight>)和JoinTableQuery
AliasJoinOnQuery<TLeft, TRight> Join<TLeft, TRight>(this TLeft left, TRight right)
where TLeft : IAliasTable<ITable>
where TRight : IAliasTable<ITable>;
var joinOn = _db.From("Employees")
.As("e")
.Join(_db.From("Departments").As("d"));
// SELECT * FROM [Employees] AS e INNER JOIN [Departments] AS d
5. LeftTableJoin扩展方法
AliasJoinOnQuery<TLeft, T> LeftTableJoin<TLeft, TRight, T>(this AliasJoinOnQuery<TLeft, TRight> joinOn, T table)
where TLeft : IAliasTable<ITable>
where TRight : IAliasTable<ITable>
where T : IAliasTable<ITable>;
CommentAliasTable c = new("c");
PostAliasTable p = new("p");
UserAliasTable u = new("u");
var query = c.Join(p)
.And(c.PostId.Equal(p.Id))
.LeftTableJoin(u)
.And(c.UserId.Equal(u.Id));
// SELECT * FROM [Comments] AS c INNER JOIN [Posts] AS p ON c.[PostId]=p.[Id] INNER JOIN [Users] AS u ON c.[UserId]=u.[Id]
6. RightTableJoin扩展方法
AliasJoinOnQuery<TRight, T> RightTableJoin<TLeft, TRight, T>(this AliasJoinOnQuery<TLeft, TRight> joinOn, T table)
where TLeft : IAliasTable<ITable>
where TRight : IAliasTable<ITable>
where T : IAliasTable<ITable>;
PostAliasTable p = new("p");
CommentAliasTable c = new("c");
UserAliasTable u = new("u");
var query = p.Join(c)
.And(p.Id.Equal(c.PostId))
.RightTableJoin(u)
.And(c.UserId.Equal(u.Id));
// SELECT * FROM [Posts] AS p INNER JOIN [Comments] AS c ON p.[Id]=c.[PostId] INNER JOIN [Users] AS u ON c.[UserId]=u.[Id]
7. Apply扩展方法
- 操作Logic的高阶函数
- 也可称开窗函数,把内部的别名表和Logic开放给用户直接使用
- 以便于使用更直接、通用的逻辑来关联查询
AliasJoinOnQuery<TLeft, TRight> Apply<TLeft, TRight>(this AliasJoinOnQuery<TLeft, TRight> joinOn, Func<Logic, TLeft, TRight, Logic> logic)
where TLeft : IAliasTable<ITable>
where TRight : IAliasTable<ITable>;
var query = new CommentAliasTable("c")
.Join(new PostAliasTable("p"))
.AsRightJoin()
.Apply((q, c, p) => q
.And(c.PostId.Equal(p.Id))
.And(c.Pick.EqualValue(true))
);
// SELECT * FROM [Comments] AS c RIGHT JOIN [Posts] AS p ON c.[PostId]=p.[Id] AND c.[Pick]=1
8. 其他相关功能
- 本组件并非只有以上功能,其他功能参看以下文档:
- 参看[AliasJoinOnQuery<TLeft, TRight>](xref:ShadowSql.Join.AliasJoinOnQuery<TLeft, TRight>)的方法和扩展方法部分
- 参看逻辑查询简介
- 参看ShadowSqlCore相关文档