2015-05-18 2 views
8

http://services.odata.org/V4/Northwind/Northwind.svc/

Я пытаюсь получить все Customers, их Orders и соответствующие Order_Details сразу и используя вложенную $expand для этого. Чтобы запросить данные, я использую следующую ссылку: http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$expand=Orders($expand=Order_Details)

Теперь я пытаюсь ограничить данные, используя $select. Проблема в том, что я не могу найти правильный синтаксис для использования $select для среднего стола - Orders. Я могу применить его только к столешнице - Customers и нижний - Order_Details как это:

http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$select=CustomerID&$expand=Orders($expand=Order_Details($select=UnitPrice))

Можно ли использовать $ выбрать также для таблиц между ними, в моем случае для Orders?

+0

вам действительно нужно, чтобы получить эти данные в виде вложенных объектов ли? По опыту я обнаружил, что в большинстве случаев ** нам нужен агрегированный вид дерева объектов **. Я разработал метод расширения LINQ 'QueryByCube' для построения такого типа запросов, используя протокол OData. Подробнее читайте здесь: [AdaptiveLINQ] (http://www.adaptivelinq.com). – nlips

+0

@nlips Я не могу использовать LINQ, мы все еще ограничены .NET 2.0. Не могли бы вы привести мне пример агрегированного представления? В основном я пытаюсь получить все эти данные с как можно меньшим количеством веб-запросов. – VladL

+0

Я предположил, что использование Northwind.svc является, например. Я предполагаю, что вы разработаете собственные службы OData и используете сервер LINQ. Идея aggegated view заключается в представлении сущности, где каждое поле создается выражением в модели нативного сущности. ** Некоторые поля выражаются как совокупность нескольких элементов **. Например, мы можем получить «общий объем продаж на одного клиента по дате», просто сделав запрос: «MyService.svc? $ Select = CustomerID, OrderDate, TotalSales». – nlips

ответ

8

Thanks @nlips за комментарий.

можно использовать $select для среднего стола, просто отделяя выбрать и расширить точкой с запятой:

http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$select=CustomerID&$expand=Orders($select=OrderID;$expand=Order_Details($select=UnitPrice))

+3

Священный гуакамоле с точкой с запятой ... Впустую часы на это. Хотите поделиться некоторыми источниками? – Jerther

+1

@ Как вы видите, я ответил на свой вопрос. Я также потратил несколько часов на это и случайно пришел к решению. Не уверен сейчас, но на момент написания я не мог найти это в официальных документах. – VladL

+1

Существует упоминание об этом, но нет примера. Слово «точка с запятой» появляется только один раз во всем документе: http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html – Jerther

Смежные вопросы