问题
This sounds rather simple (and maybe I'm missing the obvious here) but I can't find a solution. I know I can query an entity and return one, or many direct child entities doing this:
var query = from c in Service.Clients.Expand("Addresses,Comments,PhoneNumbers")..
What I would like to be able to do is do the same with 3 levels (Children of child), lets say "Country->Province->City" or "Brand->Family->Model"
I tried to expand all entities, but it fails
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
Is there a way to do this in one query, or do I have to split this in two separate queries?
回答1:
The following statement should return what you are looking for:
var query = from c in Service.Brands.Expand("Families/Models")
This will run the following odata query:
.../OData.svc/Brands?$expand=Families/Models
Here is a link to some further odata documentation:
The syntax of a $expand query option is a comma-separated list of Navigation Properties. Additionally each Navigation Property can be followed by a forward slash and another Navigation Property to enable identifying a multi-level relationship.
回答2:
In ASP.NET OData v4, the URL convention seems to have changed. It is now:
~/Brands?$expand=Families($expand=Models)
You can also select the stuff you want in sub-entities.
For example if you want just the brand family identifiers:
~/Brands?$expand=Families($select=Id)
Furthermore, if you want only the identifiers of the brand family models, you would do that:
~/Brands?$expand=Families($expand=Models($select=Id))
...and so on. Hope this helps !
来源:https://stackoverflow.com/questions/7069882/is-it-possible-to-query-an-odata-service-and-expand-child-of-child-entities