使用EF Core和Npgsql过滤PostgreSQL jsonb整数数组报错求助
问题分析与解决
异常原因
- 错误地对
jsonb类型的TypeJson字段使用string.IsNullOrEmpty()方法。EF Core会将这个逻辑转换为PostgreSQL的btrim()函数调用,但PostgreSQL没有接受jsonb类型参数的btrim()函数,直接触发了42883错误。 JsonExistAny传入的"2"是字符串类型,而JSON数组里的元素是整数,类型不匹配会导致过滤结果不符合预期。
正确查询写法
修复核心问题
去掉对jsonb字段的字符串空值判断(直接检查字段是否为null即可),同时将查询值改为整数类型,确保与数组内元素类型一致:
await _dbContext.Table .Where(x => x.TypeJson != null && EF.Functions.JsonExistAny(x.TypeJson, 2)) .ToListAsync();
简化版本(若TypeJson不会为null)
如果确定TypeJson字段不会存储null值,可进一步简化:
await _dbContext.Table .Where(x => EF.Functions.JsonExistAny(x.TypeJson, 2)) .ToListAsync();
这样就能正确筛选出Id为1和2的行,同时解决了数据库函数调用的错误问题。
内容的提问来源于stack exchange,提问作者Working Pickle
相关产品推荐
相关产品推荐

