Uso LINQPad per connettersi ai servizi ODATA su un'organizzazione CRM locale e non so come eseguire "join" o per attraversare relazioni utilizzando LINQPad.Espansione di ODATA in LinqPad
Ecco il mio URL
OrganizationData.svc/New_locationSet?$select=new_state_new_location/new_Region$expand=new_state_new_location
che funziona bene nel browser. Ecco quello che sto facendo in LINQPad:
from l in new_locationSet
from s in l.new_state_new_location
select s.new_Region
ma sto ottenendo un errore:
An expression of type 'LINQPad.User.New_state' is not allowed in a subsequent from clause in a query expression with source type 'System.Data.Services.Client.DataServiceQuery<LINQPad.User.New_location>'. Type inference failed in the call to 'SelectMany'.
Tutte le idee? Ho trovato la documentazione LINQPad OData estremamente carente ...
Quindi, dal momento che Odata ha un singolo set di dati da cui funziona (ovvero non puoi fare Odata.svc/Products() Categories()? ...), devi strutturare la query LINQ con un singolo "da" set di dati e mettere la partecipazione nella selezione come una proiezione? E siccome l'odata ha già definito tutte le relazioni, lo collegherà automaticamente? – Daryl
Sì, è proprio vero. Nell'URL non ci sono join (dato che non sono necessari dato che ci sono proprietà di navigazione), il LINQ lato client al traduttore URL cerca di essere molto intelligente su queste cose e potrebbe riconoscere alcuni join come navigazioni, ma attualmente è molto limitato (soprattutto perché non conosce o ha le chiavi esterne). Un'immagine utile da usare è immaginare OData come un grafico di oggetti e la query definisce un albero in quel grafico che si desidera restituire. Questo è molto diverso dai database relazionali in cui sono presenti tabelle e la query definisce una matrice. –