Table of Contents

sql多表查询

  • 从多张表中按sql查询数据
  • 是一种简化的联表查询,没有JOIN关键字
  • 多表由多个别名表组成
  • 通过扩展对本组件增强功能、增加易用性

1. 接口

2. 基类

MultiTableBase

3. 类

MultiTableSqlQuery

4. SqlMulti

4.1 SqlMulti扩展方法

  • 从表创建MultiTableSqlQuery
MultiTableSqlQuery SqlMulti(this ITable table, ITable other);
var multiTable = _db.From("Employees")
    .SqlMulti(_db.From("Departments"));
// SELECT * FROM [Employees] AS t1,[Departments] AS t2

4.2 SqlMulti重载扩展方法

  • 从别名表创建MultiTableSqlQuery
MultiTableSqlQuery SqlMulti(this IAliasTable table, IAliasTable other);
var multiTable = _db.From("Employees")
    .As("e")
    .SqlMulti(_db.From("Departments").As("d"))
    .Where("e.DepartmentId=d.Id");
// SELECT * FROM [Employees] AS e,[Departments] AS d WHERE e.DepartmentId=d.Id

5. Apply扩展方法

MultiTableSqlQuery Apply<TAliasTable>(this MultiTableSqlQuery multiTable, string tableName, Func<SqlQuery, TAliasTable, SqlQuery> query)
        where TAliasTable : IAliasTable;
var query = new CommentAliasTable("c")
    .SqlMulti(new PostAliasTable("p"))
    .Where("c.PostId=p.Id")
    .Apply<CommentAliasTable>("c", (q, c) => q.And(c.Pick.EqualValue(true)))
    .Apply<PostAliasTable>("p", (q, p) => q.And(p.Author.EqualValue("张三")));
// SELECT * FROM [Comments] AS c,[Posts] AS p WHERE c.[Pick]=1 AND p.[Author]='张三' AND c.PostId=p.Id

6. 其他相关功能