Estoy usando LINQPad para conectarme a los servicios ODATA en una organización local de CRM y no sé cómo realizar "uniones" o recorrer relaciones usando LINQPad.Cómo realizar una expansión ODATA en LinqPad
Aquí es mi URL
OrganizationData.svc/New_locationSet?$select=new_state_new_location/new_Region$expand=new_state_new_location
que funciona muy bien en el navegador. Aquí es lo que estoy haciendo en LINQPad:
from l in new_locationSet
from s in l.new_state_new_location
select s.new_Region
pero estoy recibiendo un error:
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'.
¿Alguna idea? He encontrado la documentación LINQPad OData extremadamente carente ...
Básicamente, dado que odata tiene un único conjunto de datos del que funciona (es decir, no puede hacer Odata.svc/Products() Categories()? ...), debe estructurar su consulta LINQ con un único "de" conjunto de datos y poner la unión en la selección como una proyección? Y dado que odata ya tiene definidas todas las relaciones, ¿lo conectará automáticamente? – Daryl
Sí, eso está muy bien. En la URL no hay uniones (ya que no son necesarias dado que hay propiedades de navegación), el traductor LINQ to URL del lado del cliente trata de ser muy inteligente sobre estas cosas y puede reconocer algunas uniones como navegaciones, pero actualmente es muy limitado (principalmente porque no sabe o tiene claves foráneas). Una imagen útil para usar es imaginar OData como un gráfico de objetos y la consulta define un árbol en ese gráfico que desea devolver. Eso es muy diferente de las bases de datos relacionales donde tiene tablas y la consulta define una matriz. –