首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ABP 分页查询

1、ABP已经定义好了分页请求DTO,返回数据格式的DTO,分别如下图:

结构

以上DTO免费版的没有,收费版里面有,但是我们可以模仿定义,从中可以看到主要包括以下四个公共DTO定义:

PagedInputDto:分页请求Dto

PagedAndSortedInputDto:分页排序Dto

PagedSortedAndFilteredInputDto:分页排序过滤Dto

PagedAndFilteredInputDto:分页过滤Dto

其中主要定义了以下几个主要属性:

MaxResultCount:每页行数

SkipCount:跳转数量,一般计算公式为SkipCount=(Page-1)*MaxResultCount(页数*行数)。

Filter:过滤字符串

Sorting:排序方式

其实我们只要继承AsyncCrudAppService这个类就已经实现了分页功能,方法是GetALL()

继承

比如我继承了AsyncCrudAppService,这个类是异步的方法,这个类的实现:

public abstract class AsyncCrudAppService : CrudAppServiceBase, IAsyncCrudAppService, IApplicationService, ITransientDependency

where TEntity : class, IEntity

where TEntityDto : IEntityDto

where TUpdateInput : IEntityDto

where TGetInput : IEntityDto

where TDeleteInput : IEntityDto

{

protected AsyncCrudAppService(IRepository repository);

public IAsyncQueryableExecuter AsyncQueryableExecuter { get; set; }

[AsyncStateMachine(typeof(AsyncCrudAppService.d__7))]

public virtual Task Create(TCreateInput input);

public virtual Task Delete(TDeleteInput input);

[AsyncStateMachine(typeof(AsyncCrudAppService.d__5))]

public virtual Task Get(TGetInput input);

[AsyncStateMachine(typeof(AsyncCrudAppService.d__6))]

public virtual Task

> GetAll(TGetAllInput input);

[AsyncStateMachine(typeof(AsyncCrudAppService.d__8))]

public virtual Task Update(TUpdateInput input);

protected virtual Task GetEntityByIdAsync(TPrimaryKey id);

}

主要看 public virtual Task

> GetAll(TGetAllInput input);这个方法,我传入的PagedResultRequestDto,返回的是PageresultDto,PagedResultRequestDto这个类里有两个属性SkipCount,MaxResultCount 这两个属性,返回类型

namespace Abp.Application.Services.Dto

{

//

// 摘要:

// Implements Abp.Application.Services.Dto.IPagedResult`1.

//

// 类型参数:

// T:

// Type of the items in the Abp.Application.Services.Dto.ListResultDto`1.Items list

public class PagedResultDto : ListResultDto, IPagedResult, IListResult, IHasTotalCount

{

//

// 摘要:

// Creates a new Abp.Application.Services.Dto.PagedResultDto`1 object.

public PagedResultDto();

//

// 摘要:

// Creates a new Abp.Application.Services.Dto.PagedResultDto`1 object.

//

// 参数:

// totalCount:

// Total count of Items

//

// items:

// List of items in current page

public PagedResultDto(int totalCount, IReadOnlyList items);

//

// 摘要:

// Total count of Items.

public int TotalCount { get; set; }

}

}

他包含了totalcount和items两个属性,你们可以自己查看。

以上是自动创建的分页的,我没有实现任何代码,现在我们的查询要增加过滤,我需要改造以上代码,首先改造DTO,免费版的是没有以上DTO,自己手写,默认有这个dto =>PagedResultRequestDto

添加DTO

我们来写一个前端查询所有用户的方法,

public async Task

> GetUserList(PagedSortedAndFilteredInputDto requestDTO)

{

var query = _userRepository.GetAll().WhereIf(!string.IsNullOrEmpty(requestDTO.Filter), m => m.UserName.Contains(requestDTO.Filter));

query = !string.IsNullOrEmpty(requestDTO.Sorting) ? query.OrderBy(m=>requestDTO.Sorting) : query.OrderByDescending(m => m.CreationTime);

var taskcount = query.Count();

var tasklist = query.PageBy(requestDTO).ToList();

return new PagedResultDto(taskcount, tasklist.MapTo

>());

}

这个代码里面用到了whereIF和pageby,这两个方法是ABP定义的扩展方法,Mapto也是ABP定义的扩展方法,前端请求就能获取到数据了

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190817A0CTWI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券