sqlsugar复杂查询语句样例详解

代码

BaseFactoryService


var source = Db.Queryable<Base_Factory, Sys_DataRelation, Base_Company>((a, b, c) => new object[] {
    JoinType.Inner,a.ID == b.Form,
    JoinType.Inner,b.To == c.ID,
}).WhereIF(!string.IsNullOrEmpty(parm.QueryText),
 (a, b, c) => a.FactoryName.Contains(parm.QueryText) || a.FactoryNo.Contains(parm.QueryText))
.Select((a, b, c) => new FactoryVM
{
    ID = a.ID,
    FactoryNo = a.FactoryNo,
    FactoryName = a.FactoryName,
    Remark = a.Remark,
    Enable = a.Enable,
    CompanyUID = c.ID,
    CompanyNo = c.CompanyNo,
    CompanyName = c.CompanyName,
    CreateTime = a.CreateTime,
    UpdateTime = a.UpdateTime,
    CreateID = a.CreateID,
    CreateName = a.CreateName,
    UpdateID = a.UpdateID,
    UpdateName = a.UpdateName
})
.MergeTable();

代码详解

  1. Db.Queryable<Base_Factory, Sys_DataRelation, Base_Company>((a, b, c) => new object[] { ... }):

    • 这里使用了 SqlSugarQueryable 方法来构建一个多表查询,Base_FactorySys_DataRelationBase_Company 是三个不同的数据库表或实体。
    • (a, b, c) 是这些表的别名,它们用于后续的查询构建。
    • new object[] { ... } 中指定了表连接的类型和条件:
      • JoinType.Inner:表示使用内连接。
      • a.ID == b.Form:表示 Base_Factory 表和 Sys_DataRelation 表之间的连接条件,a.ID 必须等于 b.Form
      • b.To == c.ID:表示 Sys_DataRelation 表和 Base_Company 表之间的连接条件,b.To 必须等于 c.ID
  2. WhereIF(!string.IsNullOrEmpty(parm.QueryText), (a, b, c) => ...):

    • 使用 WhereIF 方法来构建一个有条件的过滤语句。
    • !string.IsNullOrEmpty(parm.QueryText) 检查查询文本是否为空或为 null。
    • 如果有查询文本,则添加条件过滤:a.FactoryName.Contains(parm.QueryText) || a.FactoryNo.Contains(parm.QueryText),即根据 FactoryNameFactoryNo 字段进行模糊查询。
  3. Select((a, b, c) => new FactoryVM { ... }):

    • Select 方法用于选择要查询的字段并将结果映射到 FactoryVM 视图模型中。
    • FactoryVM 代表一个数据传输对象或视图模型,包含了查询中选择的字段。
  4. new FactoryVM { ... }:

    • 创建了一个 FactoryVM 对象并将查询的结果映射到该对象的属性中。
    • 这里选择了来自不同表的字段,包括:
      • Base_Factory 表 (a) 的字段:ID, FactoryNo, FactoryName, Remark, Enable, CreateTime, UpdateTime, CreateID, CreateName, UpdateID, UpdateName
      • Base_Company 表 (c) 的字段:CompanyUID (映射为 c.ID), CompanyNo, CompanyName
  5. MergeTable():

    • MergeTable 方法用于将多表查询结果合并为一个单一结果集。在某些场景下,MergeTable 会将多个表的结果临时合并到一起,以便进行进一步操作,例如分页、排序等。

结论

代码中构建的查询使用了 SqlSugar 提供的多表连接、条件过滤和字段选择功能,映射到一个名为 FactoryVM 的视图模型中。用在需要添加其他表的字段进来的场景,如用户所属部门,工厂所属公司等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值