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

如何在Dynamics NAV Web服务中使用OR表达式进行过滤?

在Dynamics NAV中用OR逻辑跨字段搜索"John"的正确实现

嘿,我一眼就看出你这段代码的问题了——你把两个字段的过滤条件都赋值给了同一个filters[0]对象,结果第一个设置的FirstName直接被后面的ShortName覆盖了,最后实际只生效了ShortName的过滤,完全没实现你想要的OR逻辑。

在Dynamics NAV的Web Service中,要实现不同字段之间的OR过滤,你需要把两个条件合并到同一个Filter对象的Criteria属性里,用NAV原生支持的过滤语法来编写OR表达式。

正确代码示例

// 创建单个Filter对象,用来承载OR逻辑的条件
CustomerInterface.CustomerInterface_Filter filter = new CustomerInterface.CustomerInterface_Filter();
// Field可以指定任意一个存在的字段(这里选FirstName即可,不影响最终逻辑)
filter.Field = CustomerInterface.CustomerInterface_Fields.FirstName;
// 用NAV过滤语法编写OR条件,字符串值需要用单引号包裹
filter.Criteria = "FirstName = 'John' OR ShortName = 'John'";

// 调用ReadMultiple方法,传入包含这个Filter的数组
CustomerInterface.CustomerInterface[] response = service.ReadMultiple(new[] { filter }, null, 0);

简化写法(用管道符替代OR关键字)

NAV的过滤语法也支持用|作为OR的简写,代码可以更简洁:

filter.Criteria = "FirstName='John'|ShortName='John'";

额外说明

  • 如果是同一字段的多个值需要用OR逻辑(比如FirstName是John或Jane),可以直接用逗号分隔:FirstName='John','Jane'
  • 多个Filter对象默认是AND逻辑,所以如果直接传入两个Filter(一个FirstName,一个ShortName),会变成FirstName='John' AND ShortName='John',这和你的需求正好相反。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:55:45