您现在的位置是:网站首页> 编程资料编程资料
.NET 6开发TodoList应用之实现查询排序_实用技巧_
2023-05-24
341人已围观
简介 .NET 6开发TodoList应用之实现查询排序_实用技巧_
需求
关于查询的另一个需求是要根据前端请求的排序字段进行对结果相应的排序。
目标
实现根据排序要求返回排序后的结果
原理与思路
要实现根据前端请求的进行相应排序,结合我们之前写好的Specification,可以比较简单地做到。
实现
我们还是用TodoItem请求来举例,再添加一个排序字段到查询请求中:
GetTodoItemsWithConditionQuery.cs
using AutoMapper; using AutoMapper.QueryableExtensions; using MediatR; using TodoList.Application.Common.Interfaces; using TodoList.Application.Common.Mappings; using TodoList.Application.Common.Models; using TodoList.Application.TodoItems.Specs; using TodoList.Domain.Entities; using TodoList.Domain.Enums; namespace TodoList.Application.TodoItems.Queries.GetTodoItems; public class GetTodoItemsWithConditionQuery : IRequest> { public Guid ListId { get; set; } public bool? Done { get; set; } public string? Title { get; set; } public PriorityLevel? PriorityLevel { get; set; } public string? SortOrder { get; set; } = "title_asc"; public int PageNumber { get; set; } = 1; public int PageSize { get; set; } = 10; } public class GetTodoItemsWithConditionQueryHandler : IRequestHandler > { private readonly IRepository _repository; private readonly IMapper _mapper; public GetTodoItemsWithConditionQueryHandler(IRepository repository, IMapper mapper) { _repository = repository; _mapper = mapper; } public async Task > Handle(GetTodoItemsWithConditionQuery request, CancellationToken cancellationToken) { var spec = new TodoItemSpec(request); return await _repository .GetAsQueryable(spec) .ProjectTo (_mapper.ConfigurationProvider) .PaginatedListAsync(request.PageNumber, request.PageSize); } }
同时把原本写在查询中的条件整合到了TodoItemSpec中:
TodoItemSpec.cs
// 省略其他... public TodoItemSpec(GetTodoItemsWithConditionQuery query) : base(x => x.ListId == query.ListId && (!query.Done.HasValue || x.Done == query.Done) && (!query.PriorityLevel.HasValue || x.Priority == query.PriorityLevel) && (string.IsNullOrEmpty(query.Title) || x.Title!.Trim().ToLower().Contains(query.Title!.ToLower()))) { if (string.IsNullOrEmpty(query.SortOrder)) return; switch (query.SortOrder) { // 仅作有限的演示 default: ApplyOrderBy(x => x.Title!); break; case "title_desc": ApplyOrderByDescending(x =>x .Title!); break; case "priority_asc": ApplyOrderBy(x => x.Priority); break; case "priority_desc": ApplyOrderByDescending(x => x.Priority); break; } } 验证
启动Api项目,执行查询TodoItem的请求:
请求

响应

总结
这样我们就完成了根据前端需求进行后端排序并返回结果的需求,下一篇文章我们将介绍查询中的最后一个不是很常用,但是在某些情况下很有用的概念:数据塑形。
到此这篇关于.NET 6开发TodoList应用之实现查询排序 的文章就介绍到这了,更多相关.NET 6实现查询排序 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
相关内容
- gojs一些实用的高级用法_实用技巧_
- .NET 6中间件Http Logging使用介绍_实用技巧_
- .NET 6开发TodoList应用之请求日志组件HttpLogging介绍_实用技巧_
- .NET 6开发TodoList应用之实现查询分页_实用技巧_
- .Net Core下使用Dapper的方法_自学过程_
- ORM框架之Dapper简介和性能测试_基础应用_
- .NetCore使用Swagger+API多版本控制的流程分析_实用技巧_
- .NET 6开发TodoList应用之实现ActionFilter_实用技巧_
- 基于ABP框架实现RBAC(角色访问控制)_实用技巧_
- 基于ABP框架实现数据字典开发_实用技巧_
