2015-05-18 41 views
8

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

Sto cercando di ottenere tutte Customers, la loro Orders e corrispondenti Order_Details contemporaneamente e utilizzando nidificato $expand per questo. Per interrogare i dati che sto utilizzando seguente link: http://services.odata.org/V4/Northwind/Northwind.svc/Customers?$expand=Orders($expand=Order_Details)

Ora sto cercando di limitare i dati utilizzando $select. Il problema è che non riesco a trovare la sintassi corretta per utilizzare $select per il middle table - Orders. Posso applicare solo per il piano del tavolo - Customers ea quello inferiore - Order_Details come questo:

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

E 'possibile utilizzare $ selezionare anche per le tabelle in mezzo, nel mio caso per Orders?

+0

Hai realmente bisogno per ottenere questi dati come oggetti nidificati? Dall'esperienza ho scoperto che nella maggior parte dei casi, ** abbiamo bisogno di una vista aggregata di un albero degli oggetti **. Ho sviluppato il metodo di estensione LINQ 'QueryByCube' per costruire questo tipo di servizio interrogabile usando il protocollo OData. Maggiori informazioni qui: [AdaptiveLINQ] (http://www.adaptivelinq.com). – nlips

+0

@nlips Non riesco a utilizzare LINQ, siamo ancora limitati a .NET 2.0. Potresti per favore darmi un esempio di vista aggregata? Fondamentalmente sto cercando di ottenere tutti quei dati con il minor numero possibile di richieste web – VladL

+0

Ho pensato che l'uso di Northwind.svc sia per esempio. Immagino che svilupperai i tuoi servizi OData e userai LINQ lato server. L'idea di una vista aggregata è quella di presentare un insieme di entità in cui ogni campo è costruito da un'espressione nel modello di entità nativa. ** Alcuni campi sono espressi come aggregazione di più articoli **. Ad esempio, possiamo ottenere le vendite totali per cliente per data_ semplicemente facendo la richiesta: 'MyService.svc? $ Select = CustomerID, OrderDate, TotalSales'. – nlips

risposta

8

Grazie @nlips per il suo commento.

E 'possibile utilizzare $select per la tavola centrale, semplicemente separando selezionare ed espandere con virgola:

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

+3

Holy guacamole a punto e virgola ... Ore sprecate su questo. Cura di condividere alcuni documenti sorgente? – Jerther

+1

@Jerther come vedi, ho risposto alla mia stessa domanda. Ho anche perso ore su questo e sono arrivato alla soluzione per caso. Non sono sicuro di ora, ma al momento della stesura non sono riuscito a trovarlo nei documenti ufficiali. – VladL

+1

Ne viene menzionato, ma nessun esempio. La parola punto e virgola appare una sola volta nell'intero documento: http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html – Jerther