系列導航
使用Hot Chocolate和.NET 6構建GraphQL應用文章索引
需求
從前幾篇文章可以看出,使用Hot Chocolate實作GraphQL介面是比較簡單的,本篇文章我們繼續查詢中的另一個需求:排序,
思路
Hot Chocolate提供了UseSorting屬性來用于構造包含查詢過濾的SQL陳述句,所以我們直接使用就好了,
實作
要使用Sorting屬性,需要先在添加服務依賴注入的時候指定:
ProgramExtension.cs
builder.Services
.AddGraphQLServer()
.AddFiltering()
.AddProjections()
.AddSorting()
.AddQueryType<Query>()
.AddType<PostType>();
然后在介面上方添加UseSorting即可,注意屬性添加的順序,
Query.cs
[UseProjection]
[UseFiltering]
[UseSorting]
public IQueryable<Post> GetPosts([Service] IRepository<Post> repository) => repository.GetAsQueryable();
這樣就實作了查詢結果的排序,下面我們來驗證一下,
驗證
啟動Api專案,呼叫介面:

可以看到在回傳體中資料已經按title升序排列了,我們再來看一下控制臺輸出的EF Core日志:
[15:17:55 INF] Executed DbCommand (6ms) [Parameters=[@__p_0='?' (Size = 7)], CommandType='Text', CommandTimeout='30']
SELECT "p"."Id", "p"."Title", "p"."Author", "c"."Content", "c"."Id", "t0"."Name", "t0"."PostsId", "t0"."TagsId", "t0"."Id"
FROM "Posts" AS "p"
LEFT JOIN "Comments" AS "c" ON "p"."Id" = "c"."PostId"
LEFT JOIN (
SELECT "t"."Name", "p0"."PostsId", "p0"."TagsId", "t"."Id"
FROM "PostTag" AS "p0"
INNER JOIN "Tags" AS "t" ON "p0"."TagsId" = "t"."Id"
) AS "t0" ON "p"."Id" = "t0"."PostsId"
WHERE (@__p_0 = '') OR (instr("p"."Title", @__p_0) > 0)
ORDER BY "p"."Title", "p"."Id", "c"."Id", "t0"."PostsId", "t0"."TagsId"
[15:17:55 INF] Executed endpoint 'Hot Chocolate GraphQL Pipeline'
從日志中可以看到Hot Chocolate已經為生成的SQL陳述句添加了Order排序子句了,在示例中我們選擇了title(ASC)作為排序的條件來展示,
總結
在本文中我們實作了查詢排序,下一篇文章將會介紹如何進行查詢資料的分頁功能,
本文來自博客園,作者:CODE4NOTHING,轉載請注明原文鏈接:https://www.cnblogs.com/code4nothing/p/graphql-net6-6.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/423513.html
標籤:.NET技术
上一篇:C#中的陳述句
