.NET 6開(kāi)發(fā)TodoList應(yīng)用之實(shí)現(xiàn)查詢排序
需求
關(guān)于查詢的另一個(gè)需求是要根據(jù)前端請(qǐng)求的排序字段進(jìn)行對(duì)結(jié)果相應(yīng)的排序。
目標(biāo)
實(shí)現(xiàn)根據(jù)排序要求返回排序后的結(jié)果
原理與思路
要實(shí)現(xiàn)根據(jù)前端請(qǐng)求的進(jìn)行相應(yīng)排序,結(jié)合我們之前寫好的Specification
,可以比較簡(jiǎn)單地做到。
實(shí)現(xiàn)
我們還是用TodoItem
請(qǐng)求來(lái)舉例,再添加一個(gè)排序字段到查詢請(qǐng)求中:
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<PaginatedList<TodoItemDto>> { 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<GetTodoItemsWithConditionQuery, PaginatedList<TodoItemDto>> { private readonly IRepository<TodoItem> _repository; private readonly IMapper _mapper; public GetTodoItemsWithConditionQueryHandler(IRepository<TodoItem> repository, IMapper mapper) { _repository = repository; _mapper = mapper; } public async Task<PaginatedList<TodoItemDto>> Handle(GetTodoItemsWithConditionQuery request, CancellationToken cancellationToken) { var spec = new TodoItemSpec(request); return await _repository .GetAsQueryable(spec) .ProjectTo<TodoItemDto>(_mapper.ConfigurationProvider) .PaginatedListAsync(request.PageNumber, request.PageSize); } }
同時(shí)把原本寫在查詢中的條件整合到了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; } }
驗(yàn)證
啟動(dòng)Api項(xiàng)目,執(zhí)行查詢TodoItem的請(qǐng)求:
請(qǐng)求
響應(yīng)
總結(jié)
這樣我們就完成了根據(jù)前端需求進(jìn)行后端排序并返回結(jié)果的需求,下一篇文章我們將介紹查詢中的最后一個(gè)不是很常用,但是在某些情況下很有用的概念:數(shù)據(jù)塑形。
到此這篇關(guān)于.NET 6開(kāi)發(fā)TodoList應(yīng)用之實(shí)現(xiàn)查詢排序 的文章就介紹到這了,更多相關(guān).NET 6實(shí)現(xiàn)查詢排序 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- .NET 6開(kāi)發(fā)TodoList應(yīng)用之實(shí)現(xiàn)查詢分頁(yè)
- .NET 6開(kāi)發(fā)TodoList應(yīng)用之實(shí)現(xiàn)接口請(qǐng)求驗(yàn)證
- .NET?6開(kāi)發(fā)TodoList應(yīng)用之實(shí)現(xiàn)DELETE請(qǐng)求與HTTP請(qǐng)求冪等性
- .NET6使WebApi獲取訪問(wèn)者IP地址
- .NET 6開(kāi)發(fā)TodoList應(yīng)用之實(shí)現(xiàn)PUT請(qǐng)求
- .NET 6開(kāi)發(fā)TodoList應(yīng)用之實(shí)現(xiàn)全局異常處理
- .NET 6開(kāi)發(fā)TodoList應(yīng)用之使用AutoMapper實(shí)現(xiàn)GET請(qǐng)求
相關(guān)文章
asp.net基于JWT的web api身份驗(yàn)證及跨域調(diào)用實(shí)踐
這篇文章主要介紹了asp.net基于JWT的web api身份驗(yàn)證及跨域調(diào)用實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07asp.net中使用cookie與md5加密實(shí)現(xiàn)記住密碼功能的實(shí)現(xiàn)代碼
雖然.net內(nèi)置了登陸控件,有記住密碼的功能,但還是想自己實(shí)踐一下,以下代碼主要應(yīng)用了COOKIE,包括安全加密的過(guò)程等2013-02-02在.Net?Framework應(yīng)用中請(qǐng)求HTTP2站點(diǎn)的問(wèn)題解析
隨著各大瀏覽器支持和蘋果的帶頭效應(yīng),HTTP2的應(yīng)用會(huì)越來(lái)越廣泛,但是規(guī)模龐大的.NET?Framework應(yīng)用卻也不能為了連接HTTP2就升級(jí)到NET?Core平臺(tái)。通過(guò)本文提供的方案,可以最小成本的實(shí)現(xiàn).NET?Framework應(yīng)用成功訪問(wèn)HTTP2站點(diǎn),感興趣的朋友跟隨小編一起看看吧2022-07-07.NET中防止Access數(shù)據(jù)庫(kù)下載
.NET中防止Access數(shù)據(jù)庫(kù)下載...2006-09-09DropDownList 下拉框選擇改變促發(fā)事件和防全局刷新(推薦)
這篇文章主要介紹了DropDownList 下拉框選擇改變促發(fā)事件和防全局刷新(推薦)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10CentOS上運(yùn)行ZKEACMS的詳細(xì)過(guò)程
這篇文章主要為大家介紹了CentOS上運(yùn)行ZKEACMS的詳細(xì)過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05DropDownList根據(jù)下拉項(xiàng)的Text文本序號(hào)排序
在某些時(shí)候表中沒(méi)有可以排序的字段同時(shí)呢也不想修改表結(jié)構(gòu),但它的項(xiàng)文本有序號(hào)這時(shí)就可以用這方法排序,感興趣的你可以參考下,或許本文知識(shí)點(diǎn)對(duì)你有所幫助2013-03-03iis訪問(wèn)出現(xiàn)各種問(wèn)題(Vs訪問(wèn)正常)的部分處理方法詳細(xì)整理
在vs中調(diào)試都可以正常,但是在iis訪問(wèn)就會(huì)出現(xiàn)各種問(wèn)題,很是疑惑索性把這些問(wèn)題整理一下,這樣更容易的可以處理方法說(shuō)明清楚,感興趣的朋友可以了解下2013-01-01