正确的方法是:
http://odata.stackexchange.com/codingdict/atom/Users(1569)?$expand=Comments
问题在于数据源中似乎没有用户(不知道为什么),因此上述查询将返回404。但这是正确的语法。
这个想法是,如果您只想获得有关一个??用户的信息,则可以通过使用来“导航” /Users(1569)
(括号中的内容是实体集的主键)。然后,如果您还想包含所有注释,只需添加$expand=Comments
。如果您只需要注释而不是有关用户的信息,则可以执行此操作/Users(1569)/Comments
。
请注意,您使用的服务未定义导航属性,因此上述内容将无法正常使用,因为“连接”实际上不受支持。但是stackexchange odata端点确实定义了导航属性。
基本上,联接是在服务器/服务上定义的,因此客户端不必知道哪个列是哪个主键的外键。
它还对不使用关系数据库作为存储的数据源有所帮助,因为它不会强迫它们创建伪外键。
您可以扩展图的其他“层”。如果在扩展中返回的实体还定义了其他导航属性,则可以指定以逗号分隔的导航属性列表。
这是一个组合服务的示例,请注意,这正在扩展集合中的每个客户,这类似于多重联接。
.../Customers?$expand=Orders,OrderDetails