代码
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();
代码详解
-
Db.Queryable<Base_Factory, Sys_DataRelation, Base_Company>((a, b, c) => new object[] { ... })
:- 这里使用了
SqlSugar
的Queryable
方法来构建一个多表查询,Base_Factory
、Sys_DataRelation
和Base_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
。
- 这里使用了
-
WhereIF(!string.IsNullOrEmpty(parm.QueryText), (a, b, c) => ...)
:- 使用
WhereIF
方法来构建一个有条件的过滤语句。 !string.IsNullOrEmpty(parm.QueryText)
检查查询文本是否为空或为 null。- 如果有查询文本,则添加条件过滤:
a.FactoryName.Contains(parm.QueryText) || a.FactoryNo.Contains(parm.QueryText)
,即根据FactoryName
或FactoryNo
字段进行模糊查询。
- 使用
-
Select((a, b, c) => new FactoryVM { ... })
:Select
方法用于选择要查询的字段并将结果映射到FactoryVM
视图模型中。FactoryVM
代表一个数据传输对象或视图模型,包含了查询中选择的字段。
-
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
。
- 创建了一个
-
MergeTable()
:MergeTable
方法用于将多表查询结果合并为一个单一结果集。在某些场景下,MergeTable
会将多个表的结果临时合并到一起,以便进行进一步操作,例如分页、排序等。
结论
代码中构建的查询使用了 SqlSugar
提供的多表连接、条件过滤和字段选择功能,映射到一个名为 FactoryVM
的视图模型中。用在需要添加其他表的字段进来的场景,如用户所属部门,工厂所属公司等。