Table of Contents

表逻辑查询

从表中按逻辑查询数据

1. 接口

2. 类

TableQuery

3. 从表创建查询

从表创建TableQuery<TTable>

3.1 ToQuery扩展方法

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

3.2 ToOrQuery扩展方法

  • 从表创建TableQuery<TTable>的OR查询
TableQuery<TTable> ToOrQuery<TTable>(this TTable table)
        where TTable : ITable;
var query = _db.From("Users")
    .ToOrQuery()
    .Or(_id.Equal())
    .Or(_status.Equal("Status"));
// SELECT * FROM [Users] WHERE Id=@Id OR Status=@Status

4. And方法

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

5. Or方法

TableQuery<TTable> Or(Func<TTable, AtomicLogic> query);
var query = new UserTable()
    .ToOrQuery()
    .Or(user => user.Id.Equal())
    .Or(_status.Equal("Status"));
// SELECT * FROM [Users] WHERE Id=@Id OR Status=@Status

6. Apply方法

  • 操作Logic的高阶函数
  • 也可称开窗函数,把内部的表和Logic开放给用户直接使用
  • 以便于使用更直接、通用的逻辑来关联查询
  • 查询子函数标记static性能更好
TableQuery<TTable> Apply(Func<Logic, TTable, Logic> query);
var query = new UserTable()
    .ToQuery()
    .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. 其他相关功能