这听起来很简单(也许我错过了这里明显的)但我找不到解决方案。我知道我可以查询实体并返回一个或多个直接子实体执行此操作:
var query = from c in Service.Clients.Expand("Addresses,Comments,PhoneNumbers")..
我希望能够做到的是同样的3级(孩子的孩子),让我们说“Country->省 - >城市”或“Brand-> Family-> Model”
我试图扩展所有实体,但它失败了
var query = from c in Service.Brands.Expand("Families,Models").. //fails,
//which even makes some sense, since Models is a Child of Family, not Brand
var query = from c in Service.Brands.Expand("Families").. //this works,
//but Family.Models is empty
有没有办法在一个查询中执行此操作,还是必须在两个单独的查询中将其拆分?
答案 0 :(得分:27)
以下陈述应该返回您要找的内容:
var query = from c in Service.Brands.Expand("Families/Models")
这将运行以下odata查询:
.../OData.svc/Brands?$expand=Families/Models
Here是指向其他odata文档的链接:
$ expand查询选项的语法是以逗号分隔的导航属性列表。此外,每个导航属性后面都可以跟一个正斜杠和另一个导航属性,以便识别多级关系。
答案 1 :(得分:24)
在ASP.NET OData v4中,URL约定似乎已更改。现在是:
~/Brands?$expand=Families($expand=Models)
您还可以在子实体中选择所需的内容 例如,如果您只想要品牌系列标识符:
~/Brands?$expand=Families($select=Id)
此外,如果您只想要品牌系列型号的标识符,您可以这样做:
~/Brands?$expand=Families($expand=Models($select=Id))
......等等。希望这有帮助!