You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在HotChocolate+Dapper中如何从IResolverContext提取Where过滤条件?

从HotChocolate的IResolverContext提取过滤条件

要从IResolverContext中提取where子句的过滤信息,可按以下方式操作:

  • 直接获取绑定的输入对象
    如果你已经定义了对应where参数的CLR输入类型(比如ProjectWhereInput),可以直接从上下文取出绑定后的实例:

    var whereInput = context.Argument<ProjectWhereInput>("where");
    

    此时whereInput会包含Name属性(对应name字段),其下的Contains属性值就是"Bridge",直接访问属性就能拿到所需信息。

  • 解析查询AST节点
    若需要更底层的AST解析(比如你提到的要转换为SQL的场景),可以直接遍历上下文的查询AST节点:

    // 找到where参数对应的节点
    var whereArg = context.Field.Arguments.FirstOrDefault(a => a.Name.Value == "where");
    if (whereArg?.Value is ObjectValueNode whereValueNode)
    {
        // 遍历where对象的所有字段(这里是name)
        foreach (var fieldNode in whereValueNode.Fields)
        {
            var fieldName = fieldNode.Name.Value; // 得到"name"
            if (fieldNode.Value is ObjectValueNode opValueNode)
            {
                // 遍历操作符节点(这里是contains)
                foreach (var opNode in opValueNode.Fields)
                {
                    var operation = opNode.Name.Value; // 得到"contains"
                    var value = ((StringValueNode)opNode.Value).Value; // 得到"Bridge"
                }
            }
        }
    }
    

针对你提到的需要将AST转换为SQL的复杂场景,手动解析AST容易出错且效率低,建议参考HotChocolate内置的过滤扩展逻辑,复用其已有的AST解析能力来生成对应的SQL条件,避免重复实现一套过滤规则。


内容的提问来源于stack exchange,提问作者ValidfroM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:48:11