is it possible to Query an Odata service and expand Child of Child entities?

核能气质少年 提交于 2020-01-09 12:52:02

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!