Можно ли запросить службу Odata и расширить сущности Child of Child? - PullRequest
20 голосов
/ 15 августа 2011

Звучит довольно просто (и, может быть, я здесь упускаю очевидное), но я не могу найти решение.Я знаю, что могу запросить сущность и вернуть одну или несколько прямых дочерних сущностей, делая это:

var query = from c in Service.Clients.Expand("Addresses,Comments,PhoneNumbers")..

Что я хотел бы сделать, это сделать то же самое с 3 уровнями (дети ребенка),скажем "Страна-> Провинция-> Город" или "Бренд-> Семья-> Модель"

Я попытался расширить все объекты, но это не удалось

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

Есть ли способсделать это в одном запросе, или мне нужно разделить это на два отдельных запроса?

Ответы [ 2 ]

27 голосов
/ 16 августа 2011

Следующее утверждение должно вернуть то, что вы ищете:

var query = from c in Service.Brands.Expand("Families/Models")

Это запустит следующий запрос odata:

.../OData.svc/Brands?$expand=Families/Models

Здесь - ссылка на дополнительную документацию по одатам:

Синтаксис параметра запроса $ expand представляет собой разделенный запятыми список свойств навигации. Кроме того, каждое свойство навигации может сопровождаться косой чертой и другим свойством навигации, чтобы можно было идентифицировать многоуровневые отношения.

24 голосов
/ 05 ноября 2014

В ASP.NET OData v4 соглашение об URL-адресе изменилось. Сейчас:

~/Brands?$expand=Families($expand=Models)

Вы также можете выбрать материал, который вы хотите в дочерних сущностях.
Например, если вам нужны только идентификаторы семейства брендов:

~/Brands?$expand=Families($select=Id)

Кроме того, если вам нужны только идентификаторы моделей семейства брендов, вы должны сделать это:

~/Brands?$expand=Families($expand=Models($select=Id))

... и так далее. Надеюсь, это поможет!

...