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

如何编写OData查询筛选两层Expand嵌套的属性?

正确的OData查询写法

修复原查询(解决in语法错误)

如果你的OData服务是V4版本,原查询的问题大概率是字符串拼接细节或格式问题,以下是修正后的代码:

var queryUrl = serviceURL + 'Thing1Thing2RelationTable?$expand=Thing1($select=ID,DisplayName;$expand=Attribute)&$filter=Thing2ID eq ' + (typeof selectedThing2ID === 'string' ? `'${selectedThing2ID}'` : selectedThing2ID) + ' and Thing1/Attribute/Type in (\'Decimal\',\'Float\',\'Money\',\'BigInt\',\'Int\',\'SmallInt\')&$orderby=Thing1/DisplayName';

注意:

  • 若selectedThing2ID是字符串类型,必须用单引号包裹;数字类型则不需要
  • 导航属性路径必须用正斜杠/,不要用反斜杠\(你之前尝试的Attribute\Type是错误写法)

如果你的OData服务是V3版本,由于V3不支持in操作符,需要用多个or条件替代:

var typeFilters = ['Decimal','Float','Money','BigInt','Int','SmallInt'].map(type => `Thing1/Attribute/Type eq '${type}'`).join(' or ');
var queryUrl = serviceURL + 'Thing1Thing2RelationTable?$expand=Thing1($select=ID,DisplayName;$expand=Attribute)&$filter=Thing2ID eq ' + (typeof selectedThing2ID === 'string' ? `'${selectedThing2ID}'` : selectedThing2ID) + ' and (' + typeFilters + ')&$orderby=Thing1/DisplayName';

更优查询(直接获取Thing1数据,避免返回关联表)

既然你不需要关联表的行数据,直接查询Thing1实体,通过$filter关联关联表并筛选条件,能减少不必要的数据传输:

OData V4版本:

var queryUrl = serviceURL + 'Thing1?$select=ID,DisplayName&$expand=Attribute&$filter=Thing1Thing2RelationTable/any(r: r/Thing2ID eq ' + (typeof selectedThing2ID === 'string' ? `'${selectedThing2ID}'` : selectedThing2ID) + ') and Attribute/Type in (\'Decimal\',\'Float\',\'Money\',\'BigInt\',\'Int\',\'SmallInt\')&$orderby=DisplayName';

OData V3版本:

var typeFilters = ['Decimal','Float','Money','BigInt','Int','SmallInt'].map(type => `Attribute/Type eq '${type}'`).join(' or ');
var queryUrl = serviceURL + 'Thing1?$select=ID,DisplayName&$expand=Attribute&$filter=Thing1Thing2RelationTable/any(r: r/Thing2ID eq ' + (typeof selectedThing2ID === 'string' ? `'${selectedThing2ID}'` : selectedThing2ID) + ') and (' + typeFilters + ')&$orderby=DisplayName';

关键说明

  • 一对一关系下,OData允许直接通过导航属性路径(如Thing1/Attribute/Type)进行筛选
  • OData V3版本不支持in操作符,必须用or拼接多个等值条件替代
  • 直接查询目标实体(Thing1)更贴合你的需求,能降低数据传输量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:25:56