系列导航

使用Hot Chocolate和.NET 6构建GraphQL应用文章索引

需求

对于查询来说,还有一大需求是针对查询的数据进行过滤,本篇文章我们准备实现GraphQL中基本的查询过滤。

思路

Hot Chocolate提供了UseFiltering属性来用于构造包含查询过滤的SQL语句,所以我们直接使用就好了。

实现

要使用Filtering属性,需要先在添加服务依赖注入的时候指定:

  • ProgramExtension.cs
builder.Services
.AddGraphQLServer()
.AddFiltering()
.AddProjections()
.AddQueryType<Query>()
.AddType<PostType>();

然后在接口上方添加UseProjection即可,注意属性添加的顺序。

  • Query.cs
[UseProjection]
[UseFiltering]
public IQueryable<Post> GetPosts([Service] IRepository<Post> repository) => repository.GetAsQueryable();

这样就实现了查询的过滤,非常简单,下面我们来验证一下。

验证

启动Api项目,调用接口:

可以看到在返回体中,只包含Title内含有graphql的结果了,我们再来看一下控制台输出的EF Core日志:

[22:43:08 INF] Executing endpoint 'Hot Chocolate GraphQL Pipeline'
[22:43:08 INF] Executed DbCommand (0ms) [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"."Id", "c"."Id", "t0"."PostsId", "t0"."TagsId"
[22:43:08 INF] Executed endpoint 'Hot Chocolate GraphQL Pipeline'

从日志中可以看到Hot Chocolate已经为生成的SQL语句添加了Where查询子句了,在示例中我们选择了contains作为过滤的条件来展示,实际上可以进行过滤的条件有很多:

总结

在本文中我们实现了查询过滤,下一篇文章将会介绍如何进行查询数据的排序。

最新文章

  1. [LeetCode] Remove Duplicates from Sorted Array II 有序数组中去除重复项之二
  2. JS策略模式
  3. mac终端terminal快捷键:
  4. 在项目中导入MRC的文件时解决办法
  5. Oracle限制某个用户的连接数及PROFILE介绍
  6. 获取JDBC中的ResultSet的记录的条数
  7. git重写历史记录
  8. python的浅拷贝和深拷贝
  9. HUOJ-10857 最大的面积 凸包+DP
  10. 【vc】14_网络编程_socket编程
  11. NHibernate初入门之配置文件属性说明(四)
  12. sql学习之基础(MySql)
  13. Android 特殊符号的转码大全
  14. VS2013创建Windows服务 || VS2015+Windows服务简易教程
  15. http缓存策略-nginx只缓存js和css不缓存html
  16. PAT Basic 1020
  17. (10)MySQL触发器(同时操作两张表)
  18. Java中sleep方法和wait的详细区别
  19. 每日scrum(7)
  20. AC自动机技巧

热门文章

  1. 【机器学*】k*邻算法-03
  2. Towards Evaluating the Robustness of Neural Networks
  3. [opencv]二维码识别开发流程及问题复盘总结
  4. [JNI开发]使用javah命令生成.h的头文件
  5. &lt;数据结构&gt;XDOJ321.高铁网络
  6. Java EE数据持久化框架 • 【第5章 MyBatis代码生成器和缓存配置】
  7. linux 部署.net core 环境
  8. oceanbase数据库比赛总结
  9. Swoole 中使用 Lock 实现进程间锁
  10. SpringBoot 之 配置文件、yaml语法、配置注入、松散绑定