筛选ODATA-v4中包含的2级层次结构

筛选ODATA-v4中包含的2级层次结构,odata,odata-v4,Odata,Odata V4,假设种族、车队和汽车制造商之间的关系都是多:多。一场比赛可以有许多车队,一个车队可以有许多汽车制造商,汽车制造商可以赞助许多车队,车队可以参加许多比赛 使用odata v-4,我如何选择指定制造商的所有赛车比赛 如果我想选择所有的比赛,包括id为475和476的队伍,我会形成我的odata查询 Race$expand=Team($select=id,name)&$filter=((Team/any(c:((c/id eq 475) or (c/id eq 476))))) 但如果我想选

假设种族、车队和汽车制造商之间的关系都是多:多。一场比赛可以有许多车队,一个车队可以有许多汽车制造商,汽车制造商可以赞助许多车队,车队可以参加许多比赛

使用odata v-4,我如何选择指定制造商的所有赛车比赛

如果我想选择所有的比赛,包括id为475和476的队伍,我会形成我的odata查询

Race$expand=Team($select=id,name)&$filter=((Team/any(c:((c/id eq 475) or (c/id eq 476)))))
但如果我想选择所有使用福特或雪佛兰汽车制造商的车队参加的比赛,我将如何形成我的URL

在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,我不认为随着时间的推移,这是一种非常实用的使用方法。考虑使用静态端点,它以制造商品牌为参数运行。 干杯