# 查询服务基类
具体代码可查看
LessSharp.Service
层Base
目录下的QueryServer
类。
这是一个仅提供查询功能的基类,一般是用于实现了IQuery
接口的视图对象,有两种泛型定义,如下所示
//用于无Id的对象
public abstract class QueryService<TDto, TQueryDto, TQuery>
where TQuery : class
where TQueryDto : QueryDto
{
}
//用于有Id的对象
public abstract class QueryService<TDto, TQueryDto, TQuery, TId> :
QueryService<TDto, TQueryDto, TQuery>
where TQuery : class
where TQueryDto : QueryDto
{
}
泛型类型 | 说明 |
---|---|
TDto | 显示传输对象 |
TQueryDto | 查询参数传输对象 |
TQuery | 查询对象,一般是实现了IQuery 的类 |
TId | TQuery 对象Id 字段的类型 |
例如
我要创建一个用户查询服务类UserService
,用户实体为User
(已实现IQuery
接口),Id
字段类型为int
,显示Dto
为UserDto
,查询参数Dto
为UserQueryDto
,那类的定义如下所示:
public class UserService : QueryService<UserDto, UserQueryDto, User, int>
{
}
# 属性
属性名 | 修饰 | 类型 | 说明 |
---|---|---|---|
DbContext | protected | AppDbContext | 这是EF的上下文类 |
Mapper | protected | IMapper | AutoMapper的映射类 |
DbQuery | protected | IQueryable<TQuery> | 查询对象类,此对象默认会经过查询过滤器处理 |
OrderDescDefaultValue | protected | bool | 是否默认Desc排序,默认值为true |
OrderDefaultField | protected | Expression<Func<TQuery, object>> | 默认排序字段,当有Id字段时,默认值有e=>e.Id |
QueryFilters | protected | List<IQueryFilter<TQuery>> | 查询过滤器列表 |
QueryToDtoMapExpression | protected | Expression<Func<TQuery, TDto>> | 对象映射表达式,赋值时会采用这个映射规则,不赋值会使用autoMapper进行自动映射 |
IdFieldExpression 第二种泛型类才有此属性 | protected | Expression<Func<TQuery, TId>> | 查询实体Id值表达式 |
提示
如果需要修改属性的值 ,请在服务类的构造函数中进行修改。
# 方法
方法名 | 修饰 | 说明 |
---|---|---|
BuildQuery<T> | protected | 构建查询对象,将传入的查询对象根据查询参数对象进行条件过滤、字段排序、分页、对象映射处理。IQueryable<T> BuildQuery<T>(IQueryable<TQuery> query, TQueryDto queryDto, Expression<Func<TQuery, T>> selectExp = null) |
QueryToListAsync<T> | protected async | 转换成列表数据,将传入的查询对象根据查询参数进行条件过滤、字段排序、分页、对象映射处理并转换成列表数据Task<List<T>> QueryToListAsync<T>(IQueryable<TQuery> query, TQueryDto queryDto, Expression<Func<TQuery, T>> selectExp = null) |
Where | protected | 查询过滤方法IQueryable<TQuery> Where(IQueryable<TQuery> query, TQueryDto queryDto) |
QueryFilter | protected | 将传入的查询对象经查询过滤器处理IQueryable<TQuery> QueryFilter(IQueryable<TQuery> query) |
Select<T> | protected | 将查询对象映射为T类型的查询对象IQueryable<T> Select<T>(IQueryable<TQuery> query) |
Page<T> | protected | 列表分页方法IQueryable<T> Page<T>(IQueryable<T> query, int pageIndex, int pageSize, bool isPageContinuity = false) |
QueryToTotalAsync | protected async | 转换成列表数量,将传入的查询对象根据查询参数进行条件过滤处理并统计列表数量Task<int> QueryToTotalAsync(IQueryable<TQuery> query, TQueryDto queryDto) |
QueryToPageListAsync | protected async | 获取分页列表Task<PageListDto<T>> QueryToPageListAsync<T>(IQueryable<TQuery> query, TQueryDto queryDto, Expression<Func<TQuery, T>> selectExp = null) |
QueryToSingleAsync | protected async | 获取单个记录Task<T> QueryToSingleAsync<T>(IQueryable<TQuery> query,Expression<Func<TQuery, bool>> expression, Expression<Func<TQuery, T>> selectExp = null) |
CheckExistAsync | protected async | 检查对象是否存在Task<bool> CheckExistAsync<T>(IQueryable<T> query, Expression<Func<T, bool>> expression) |
GetExpressionByField<TObject,TField> | protected | 根据字段构建lambda表达式Expression<Func<TObject, TField>> GetExpressionByField<TObject, TField>(string field) |
GetListAsync | public virtual async | 获取列表数据Task<List<TDto>> GetListAsync(TQueryDto queryDto) |
GetListAsync<T> | public async | 获取定列表数据,主要是给其它服务类使用Task<List<T>> GetListAsync<T>(TQueryDto queryDto, Expression<Func<TQuery, T>> selectExp = null) |
GetList | public virtual async | 获取列表数据List<TDto> GetList(TQueryDto queryDto) |
GetPageListAsync | public virtual async | 获取分页列表数据Task<PageListDto<TDto>> GetPageListAsync(TQueryDto queryDto) |
GetPageListAsync<T> | public async | 获取分页列表数据,可自定义映射的对象类型Task<PageListDto<T>> GetPageListAsync<T>(TQueryDto queryDto, Expression<Func<TQuery, T>> selectExp = null) |
GetPageList | public virtual | 获取分页列表数据PageListDto<TDto> GetPageList(TQueryDto queryDto) |
QueryToSingleByIdAsync<T> 第二种泛型类才有此方法 | protected async | 根据传入的查询对象及Id值获取单个数据Task<T> QueryToSingleByIdAsync<T>(IQueryable<TQuery> query, TId id, Expression<Func<TQuery, T>> selectExp = null) |
GetByIdAsync | public virtual async | 根据Id获取单个对象Task<TDto> GetByIdAsync(TId id) |
GetById | public virtual | 根据Id获取单个对象TDto GetById(TId id) |
GetByIdAsync<T> | public async | 根据Id获取单个对象,可自定义映射的对象类型Task<T> GetByIdAsync<T>(TId id, Expression<Func<TQuery, T>> selectExp = null) |
# 事件
事件名 | 说明 |
---|---|
OnFilter | 查询过滤时处理方法IQueryable<TQuery> OnFilter(IQueryable<TQuery> query, TQueryDto queryDto) |
OnGetSortExpression | 查询列表字段排序处理方法Expression<Func<TQuery, object>> OnGetSortExpression(string field) |
OnSort | 查询列表字段排序处理方法,这个是针对一些特殊情况,例如要多字段排序之类的IQueryable<TQuery> OnSort(IQueryable<TQuery> query, string field, bool orderDesc) => query; |
提示
这里的事件不是真正的事件类型,而是一些带有virtual
修饰的方法,通过重写此方法达到事件的效果。