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

如何在Dynamics NAV中用OData实现多范围组合过滤?

如何在Dynamics NAV的OData中实现多范围/值的过滤(无需自定义代码)

我懂你想实现的是混合范围(比如a到d、g到k)和单个值(e、f)的过滤逻辑,直接把那种自定义的'a..d|e|f|g..k'字符串用eq来匹配肯定不行——NAV的OData服务根本不认这种格式。不过好消息是,完全不用写自定义NAV代码,咱们用OData标准的过滤运算符组合就能实现你要的效果。

先拆解你的过滤需求

你写的'a..d|e|f|g..k'其实等价于四个条件的“或”组合:

  • 属性值大于等于'a'且小于等于'd'
  • 属性值等于'e'
  • 属性值等于'f'
  • 属性值大于等于'g'且小于等于'k'

用OData标准运算符组合实现

OData的$filter支持这些核心运算符:

  • ge:大于等于
  • le:小于等于
  • eq:等于
  • or:逻辑“或”
  • and:逻辑“与”

把这些组合起来,就能写出符合要求的过滤表达式。为了避免逻辑优先级混乱,建议用括号把每个范围条件包起来,最终的$filter部分应该是这样:

$filter=(property ge 'a' and property le 'd') or property eq 'e' or property eq 'f' or (property ge 'g' and property le 'k')

完整的URL示例

把这个过滤条件放到你的URL里,注意URL的格式规范(比如参数之间用&分隔,$format=json要放在正确位置),最终的URL应该是:

http://navserver/instance/OData/Company('Company')/entity?$format=json&$filter=(property ge 'a' and property le 'd') or property eq 'e' or property eq 'f' or (property ge 'g' and property le 'k')

额外注意事项

  • 大小写匹配:如果NAV中的字段是区分大小写的,要确保过滤值的大小写和字段值完全一致;如果不区分,NAV通常会自动兼容,但建议保持统一避免问题。
  • URL编码:如果你的过滤值里有特殊字符(比如空格、中文),需要对这些字符进行URL编码(比如空格替换为%20),否则可能导致请求失败。
  • 逻辑优先级:因为and的优先级比or高,其实不加括号也能正常解析,但加上括号能让逻辑更清晰,后续维护也更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:50:05