【问题标题】:Filtering a 2-level hierarchy with contains in ODATA-v4在 ODATA-v4 中过滤包含包含的 2 级层次结构
【发布时间】:2019-01-18 18:48:04
【问题描述】:

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

使用 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)))))

但是,如果我想选择使用福特或雪佛兰汽车制造商车队的所有比赛,我将如何形成我的网址。

在 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 只是数据库中的多对多映射表。

【问题讨论】:

    标签: odata odata-v4


    【解决方案1】:

    你可以试试这样的:

    Race?$filter=Team/any(y:y/Manufacturer/any(z:z/name eq 'ford' or z/name eq 'chevy' ))&$expand=Team($expand=Manufacturer)
    

    如果没有端点,很难做到这一点。 还要确保您的控制器支持至少 2 的扩展深度。

    TBH,我认为随着时间的推移,这不是一种非常实用的使用方式。考虑使用静态端点,它作为参数对您的制造商品牌进行操作。

    干杯

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2022-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多