Возможно ли запросить службу 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))
... и так далее. Надеюсь, это поможет!