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

C# 环境OData v4调用search.in提示未知函数错误问题咨询

报错原因

search.in并非OData V4原生内置标准函数,它是Azure认知搜索等特定搜索服务扩展的自定义函数,默认的Microsoft.AspNetCore.OData服务端组件未内置该函数的解析、执行逻辑,因此传入对应筛选表达式时会直接抛出未知函数错误。

触发报错的相关配置信息:

  • 请求筛选参数:...$filter=Channels/any(t: search.in(t,'A,B', ','))
  • 筛选目标属性定义:public string[]? Channels { get; set; }
  • 完整错误信息:
"The query specified in the URI is not valid. An unknown function with name 'search.in' was found. This may also be a function import or a key lookup on a navigation property, which is not allowed."
可行解决方法
  • 替换为OData原生语法实现(推荐,无额外适配成本)
    OData V4 7.4及以上版本原生支持in操作符,可以直接实现等价的多值匹配逻辑,改写后的筛选表达式如下:
    ...$filter=Channels/any(t: t in ('A', 'B'))
    
    如果使用的OData版本较低不支持in操作符,可以退化为等值判断加逻辑或的写法,兼容性覆盖所有OData V4版本:
    ...$filter=Channels/any(t: t eq 'A' or t eq 'B')
    
  • 自定义注册search.in函数兼容原有写法
    如果业务上必须保留search.in的参数写法,可以在服务端OData配置环节手动注册该自定义函数:
    1. 实现search.in的核心判断逻辑:输入待匹配字符串、分隔符拼接的候选值字符串、分隔符三个参数,返回布尔值表示是否命中
    2. 在OData模型构建器中注册该函数,绑定到字符串类型,配置参数类型、返回值类型
    3. 补充该函数到查询提供程序(如EF Core)的翻译逻辑,保证筛选条件可以正确执行
  • 适配对应服务的扩展依赖
    如果接口本身对接的是Azure认知搜索等原生支持search.in的服务,该报错通常是因为项目未引用对应服务的OData扩展包、或SDK版本过低,升级SDK、加载对应扩展的OData配置后即可正常识别该函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:27:35