2015-05-18 15 views
8

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

Próbuję uzyskać wszystkie Customers ich Orders i odpowiadające Order_Details na raz i przy użyciu zagnieżdżony $expand do tego. Aby wysłać zapytanie do danych, którego używam, należy użyć następującego linku: http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$expand=Orders($expand=Order_Details)

Teraz próbuję ograniczyć dane przy użyciu $select. Problem polega na tym, że nie mogę znaleźć poprawnej składni do użycia w środkowej tabeli - . Mogę zastosować go tylko do górnej tabeli - Customers i dolnej jednej - Order_Details tak:

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

Czy jest możliwe aby użyć $ wybrać również dla tabel pomiędzy, w moim przypadku dla Orders?

+0

Czy naprawdę trzeba uzyskać te dane jako zagnieżdżonych obiektów? Z doświadczenia odkryłem, że w większości przypadków ** potrzebujemy zagregowanego widoku drzewa obiektów **. Opracowałem metodę rozszerzenia LINQ 'QueryByCube' do budowania tego rodzaju usług, które można wysyłać za pomocą protokołu OData. Czytaj więcej tutaj: [AdaptiveLINQ] (http://www.adaptivelinq.com). – nlips

+0

@nlips Nie mogę używać LINQ, nadal jesteśmy ograniczeni do .NET 2.0. Czy mógłbyś podać mi przykład zbiorczego widoku? Zasadniczo próbuję uzyskać wszystkie te dane za pomocą jak najmniejszej ilości żądań internetowych – VladL

+0

Zakładam, że użycie Northwind.svc jest na przykład. Myślę, że rozwiniesz własne usługi OData i użyjesz serwera LINQ. Ideą widoku agresywnego jest przedstawienie zestawu jednostek, w którym każde pole jest budowane przez wyrażenie w modelu rodzimej jednostki. ** Niektóre pola są wyrażone jako suma kilku pozycji **. Na przykład, możemy uzyskać _sumową sprzedaż na klienta według daty_poprzez proste złożenie żądania: 'MyService.svc? $ Select = CustomerID, OrderDate, TotalSales'. – nlips

Odpowiedz

8

Dzięki za komentarz @nlips.

Jest możliwe użycie $select na środkowym stole po prostu wybierz i rozwiń oddzielając średnikiem:

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

+3

Święty guacamole średnik ... Zmarnowane godziny na ten temat. Chcesz udostępnić dokument źródłowy? – Jerther

+1

@Jerther jak widzisz, odpowiedziałem na moje własne pytanie. Też zmarnowałem godziny na to i trafiłem do rozwiązania przez przypadek. Nie jestem pewien, teraz, ale w momencie pisania nie mogłem znaleźć tego w oficjalnych dokumentach. – VladL

+1

Jest wzmianka o tym, ale bez przykładu. Słowo "średnik" pojawia się tylko raz w całym dokumencie: http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html – Jerther