page.DataSource = Db.Queryable<T>().Where(where)
.OrderByIF(!string.IsNullOrEmpty(parm.Sort),
$"{ parm.OrderBy } {(parm.Sort == "descending" ? "desc" : "asc")}")
.ToPageList(parm.PageIndex, parm.PageSize, ref totalCount ,ref totalPages);
这段代码使用了 SqlSugar 数据库 ORM 库,通过动态生成 LINQ 查询语句,从数据库中获取指定页的数据。它在操作 Db.Queryable<T>()
时动态构建了查询条件、排序方式,并进行了分页操作。
解释
-
Db.Queryable<T>()
:Db
是 SqlSugar 的数据库上下文对象,通过它的Queryable<T>()
方法来创建一个T
类型的查询对象。<T>
是一个泛型类型参数,代表一个实体类(如Sys_Users
),它映射到数据库中的某个表。
-
Where(where)
:Where
方法用于向查询中添加过滤条件。where
是一个表达式,它指定了如何过滤数据。它可以是一个简单条件表达式,也可以是一个复杂的条件组合。- 例如,
where
可能包含条件:m => m.UserID == "123"
,或多个条件的组合:m => m.Age > 18 && m.IsActive == true
。
-
OrderByIF
:OrderByIF
是一个有条件的排序方法。- 它的第一个参数是一个布尔值,用于决定是否进行排序。在这个例子中,排序条件为
!string.IsNullOrEmpty(parm.Sort)
。- 如果
parm.Sort
不为空,表示需要进行排序。
- 如果
- 第二个参数为排序的字段和方向,由字符串
"{parm.OrderBy} {(parm.Sort == "descending" ? "desc" : "asc")}"
决定。parm.OrderBy
是排序的字段名。parm.Sort
决定排序的顺序:如果它的值为"descending"
,则排序方向为desc
;否则为asc
。
-
ToPageList
:ToPageList
方法用于分页查询,它接收四个参数:parm.PageIndex
:页码,表示获取第几页的数据。parm.PageSize
:每页数据的条数。ref totalCount
:引用参数,用于接收总记录数。ref totalPages
:引用参数,用于接收总页数。
- 此方法执行查询,并返回一个分页列表。
Where
方法中的可能内容
Where
方法接受一个表达式或 Lambda 表达式作为参数,通常有以下几种形式:
-
简单条件:
m => m.UserID == "123"
: 查询用户ID为"123"的记录。m => m.Age > 18
: 查询年龄大于18的记录。
-
多个条件的组合:
m => m.UserName.Contains("John") && m.IsActive == true
:- 查询用户名中包含"John"并且用户是激活状态的记录。
-
动态条件:
m => m.RoleID == roleID
:- 条件根据变量
roleID
动态变化,例如roleID
是一个方法参数。
- 条件根据变量
predicate.ToExpression()
:- 动态构建的表达式条件,例如使用
Expressionable
构建的复杂查询条件。
- 动态构建的表达式条件,例如使用
-
Null 检查:
m => m.Email != null
: 查询邮箱不为空的记录。
-
集合操作:
m => new List<int> {1, 2, 3}.Contains(m.Status)
:- 查询用户状态为1、2、3中的任意一个的记录。
-
日期和范围查询:
m => m.CreatedDate >= startDate && m.CreatedDate <= endDate
:- 查询在某个日期范围内的记录。
总结
这段代码利用 SqlSugar
库的链式方法构建查询,通过动态设置 Where
条件和排序字段,实现灵活的分页数据查询。Where
方法中的内容可以根据实际业务需求,动态构建各种查询条件,从简单的相等、范围查询到复杂的组合条件。