使用 ODATA-v4 中的包含过滤 2 级层次结构
Filtering a 2-level hierarchy with contains in ODATA-v4
假设Race、Team、Car Manufacturer的关系都是many:many。一场比赛可以有很多车队,一个车队可以有很多车厂,车厂可以赞助很多车队,车队可以参加很多比赛。
如何使用 odata v-4 select 指定制造商的所有赛车。
如果我想 select 所有比赛,包括 id 为 475 和 476 的团队,我会将我的 odata 查询形成为
Race$expand=Team($select=id,name)&$filter=((Team/any(c:((c/id eq 475) or (c/id eq 476)))))
但是,如果我想 select 所有使用福特或雪佛兰汽车制造商的车队参加的比赛,我将如何形成我的 URL。
IN SQL 我会这样做:
SELECT *
FROM race
WHERE id IN ((SELECT raceid
FROM race_team
WHERE teamid IN (SELECT teamid
FROM team_carmanufacturer
WHERE carid IN (SELECT id
FROM carmanufacturer
WHERE name IN
( 'ford', 'chevy' )
))))
race_team、team_carmanufacturer就是数据库中的多对多映射表。
您可以尝试这样的操作:
Race?$filter=Team/any(y:y/Manufacturer/any(z:z/name eq 'ford' or z/name eq 'chevy' ))&$expand=Team($expand=Manufacturer)
如果没有端点,很难做到这一点。
还要确保您的控制器支持至少 2.
的扩展深度
TBH,随着时间的推移,我认为这不是一个非常实用的方法。考虑使用静态端点,它将您的制造商品牌作为参数运行。
干杯
假设Race、Team、Car Manufacturer的关系都是many:many。一场比赛可以有很多车队,一个车队可以有很多车厂,车厂可以赞助很多车队,车队可以参加很多比赛。
如何使用 odata v-4 select 指定制造商的所有赛车。
如果我想 select 所有比赛,包括 id 为 475 和 476 的团队,我会将我的 odata 查询形成为
Race$expand=Team($select=id,name)&$filter=((Team/any(c:((c/id eq 475) or (c/id eq 476)))))
但是,如果我想 select 所有使用福特或雪佛兰汽车制造商的车队参加的比赛,我将如何形成我的 URL。
IN SQL 我会这样做:
SELECT *
FROM race
WHERE id IN ((SELECT raceid
FROM race_team
WHERE teamid IN (SELECT teamid
FROM team_carmanufacturer
WHERE carid IN (SELECT id
FROM carmanufacturer
WHERE name IN
( 'ford', 'chevy' )
))))
race_team、team_carmanufacturer就是数据库中的多对多映射表。
您可以尝试这样的操作:
Race?$filter=Team/any(y:y/Manufacturer/any(z:z/name eq 'ford' or z/name eq 'chevy' ))&$expand=Team($expand=Manufacturer)
如果没有端点,很难做到这一点。 还要确保您的控制器支持至少 2.
的扩展深度TBH,随着时间的推移,我认为这不是一个非常实用的方法。考虑使用静态端点,它将您的制造商品牌作为参数运行。
干杯