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

如何在JSONAPI.NET Core中通过过滤参数筛选null值?

好问题!我来帮你梳理下JSONAPI.NET Core关于null值过滤的支持情况和实现方式:

JSONAPI.NET Core的Null值过滤支持与实现

首先明确:JSONAPI.NET Core的较新版本默认支持eq:null格式的null值过滤,如果你的项目使用的是较新的库版本,直接使用你设想的查询参数就能生效。如果旧版本不支持,也可以通过自定义逻辑扩展实现。

一、默认支持的直接使用方式

你尝试的?page[size]=100&filter[endDate]=eq:null完全符合JSON:API的过滤规范,在新版JSONAPI.NET Core中可以直接用来筛选endDate为null的数据。你只需要修改Java客户端的请求URL即可:

response = client
    .resource(CreateURLWithFilters(API_BASE_URL, "?page[size]=100&filter[endDate]=eq:null"))
    .accept("application/json")
    .type("application/vnd.api+json")
    .header(HttpHeaders.AUTHORIZATION, "Bearer " + token)
    .get(ClientResponse.class);

发送请求后,就能得到你期望的结果:

[{"attributes":{"endDate":null,"id":1,"priority":1,"message":"wrewr","propertyId":1,"roomId":null,"startDate":"2018-05-16T00:00:00","dateModifiedUtc":"2018-05-16T10:38:22.727"},"id":"1","type":"notices"}]

二、旧版本的自定义实现方案

如果你的库版本较旧,默认不支持eq:null的过滤逻辑,可以通过自定义过滤运算符来补全这个功能:

  1. 在后端服务配置中注册自定义处理器
services.AddJsonApi<AppDbContext>(options =>
{
    options.Filtering.AddDefaultOperators();
    // 注册处理null相等的自定义运算符
    options.Filtering.RegisterOperator("eq", new NullEqualityOperatorHandler());
});
  1. 实现自定义的过滤处理器类
public class NullEqualityOperatorHandler : IFilterOperatorHandler
{
    public Expression Handle(FilterContext context)
    {
        var propertyExpr = context.PropertyExpression;
        var filterValue = context.Value?.ToString();

        // 处理值为null的情况
        if (string.Equals(filterValue, "null", StringComparison.OrdinalIgnoreCase))
        {
            return Expression.Equal(propertyExpr, Expression.Constant(null, propertyExpr.Type));
        }

        // 保留原有的普通相等逻辑
        var convertedValue = Convert.ChangeType(filterValue, propertyExpr.Type);
        return Expression.Equal(propertyExpr, Expression.Constant(convertedValue));
    }
}

这个处理器会识别过滤参数中的null值,生成对应的EF查询表达式,从而筛选出数据库中该字段为null的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:16