Возможно ли запросить службу Odata и расширить дочерние объекты Child of Child?

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

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

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

Ответ 1

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

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

Это приведет к выполнению следующего запроса odata:

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

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

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

Ответ 2

В ASP.NET OData v4, похоже, изменение URL-адреса изменилось. Теперь это:

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

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

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

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

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

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