Ich verwende LINQPad, um eine Verbindung zu den ODATA-Diensten in einer lokalen CRM-Organisation herzustellen, und ich weiß nicht, wie Verknüpfungen mit LINQPad ausgeführt werden.So führen Sie eine ODATA-Erweiterung in LinqPad aus
Hier ist meine URL
OrganizationData.svc/New_locationSet?$select=new_state_new_location/new_Region$expand=new_state_new_location
, die im Browser funktioniert gut. Hier ist, was ich tue in LINQPad:
from l in new_locationSet
from s in l.new_state_new_location
select s.new_Region
aber ich erhalte eine Fehlermeldung:
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'.
Irgendwelche Ideen? Ich habe die LINQPad OData Dokumentation extrem fehlen gefunden ...
Also im Grunde, da odata einen einzelnen Datensatz hat, von dem es funktioniert (dh Sie können nicht Odata.svc/Products() Categories()? ...), müssen Sie Ihre LINQ-Abfrage mit einem einzigen Struktur "from" -Datensatz und den Beitritt in die Auswahl als Projektion setzen? Und da odata bereits alle Beziehungen definiert hat, wird es automatisch verdrahtet? – Daryl
Ja - das ist ziemlich richtig. Da in der URL keine Joins vorhanden sind (da sie aufgrund der Navigationseigenschaften nicht benötigt werden), versucht der LINQ to URL-Übersetzer auf der Clientseite sehr clever zu sein und kann einige Joins als Navigation erkennen, aber momentan ist es sehr begrenzt (hauptsächlich weil es keine Fremdschlüssel kennt oder hat). Ein hilfreiches Bild, das Sie verwenden können, ist, sich OData als ein Diagramm von Objekten vorzustellen, und die Abfrage definiert einen Baum in diesem Diagramm, den Sie zurückgeben möchten. Das ist ganz anders als bei relationalen Datenbanken, wo Sie Tabellen haben und die Abfrage eine Matrix definiert. –