Table of Contents

sql表查询

  • 从表中按sql查询数据
  • 本组件是对ShadowSql.Core同名组件的泛型扩展
  • 支持对数据表类型特殊处理,增强功能、增加易用性

1. 接口

2. 类

TableSqlQuery<TTable>

3. 从表创建查询

3.1 ToSqlQuery扩展方法

  • 从表创建TableSqlQuery<TTable>的AND查询
TableSqlQuery<TTable> ToSqlQuery<TTable>(this TTable table)
        where TTable : ITable;
var users = new UserTable();
var query = users.ToSqlQuery()
    .Where(users.Id.LessValue(100));
// SELECT * FROM [Users] WHERE Id<100

3.2 ToSqlOrQuery扩展方法

  • 从表创建TableSqlQuery<TTable>的OR查询
TableSqlQuery<TTable> ToSqlOrQuery<TTable>(this TTable table)
        where TTable : ITable;
var query = _db.From("Users")
    .ToSqlOrQuery()
    .Where("Id=@Id", "Status=@Status");
// SELECT * FROM [Users] WHERE Id=@Id OR Status=@Status

4. Where方法

TableSqlQuery<TTable> Where(Func<TTable, AtomicLogic> query);
var query = new UserTable()
    .ToSqlQuery()
    .Where(user => user.Id.Less("LastId"));
// SELECT * FROM [Users] WHERE [Id]<@LastId

5. Apply方法

  • 操作Logic的高阶函数
  • 也可称开窗函数,把内部的表和Logic开放给用户直接使用
  • 以便于使用更直接、通用的逻辑来关联查询
  • 查询子函数标记static性能更好
TableSqlQuery<TTable> Apply(Func<SqlQuery, TTable, SqlQuery> query);
var query = new UserTable()
    .ToSqlQuery()
    .Apply(static (q, u) => q
        .And(u.Id.Less("LastId"))
        .And(u.Status.EqualValue(true))
    );
// SELECT * FROM [Users] WHERE [Id]<@LastId AND [Status]=1

6. 其他相关功能