linq odata wcf-data-services

linq - ¿Es posible consultar un servicio de Odata y expandir entidades de Child of Child?



wcf-data-services (2)

En ASP.NET OData v4, la convención de URL parece haber cambiado. Esto es ahora:

~/Brands?$expand=Families($expand=Models)

También puede seleccionar las cosas que desea en sub-entidades.
Por ejemplo, si solo desea los identificadores de familia de marca:

~/Brands?$expand=Families($select=Id)

Además, si solo desea los identificadores de los modelos de familia de marca, haría lo siguiente:

~/Brands?$expand=Families($expand=Models($select=Id))

...y así. Espero que esto ayude !

Esto suena bastante simple (y quizás me esté perdiendo lo obvio aquí) pero no puedo encontrar una solución. Sé que puedo consultar una entidad y devolver una, o muchas entidades secundarias directas haciendo esto:

var query = from c in Service.Clients.Expand("Addresses,Comments,PhoneNumbers")..

Lo que me gustaría poder hacer es hacer lo mismo con 3 niveles (Hijos de niños), digamos "País-> Provincia-> Ciudad" o "Marca-> Familia-> Modelo"

Intenté expandir todas las entidades, pero falla

var query = from c in Service.Brands.Expand("Families,Models").. //fails, //which even makes some sense, since Models is a Child of Family, not Brand var query = from c in Service.Brands.Expand("Families").. //this works, //but Family.Models is empty

¿Hay alguna manera de hacer esto en una consulta o tengo que dividir esto en dos consultas separadas?


La siguiente declaración debe devolver lo que está buscando:

var query = from c in Service.Brands.Expand("Families/Models")

Esto ejecutará la siguiente consulta de odata:

.../OData.svc/Brands?$expand=Families/Models

Here hay un enlace a más documentación de odata:

La sintaxis de una opción de consulta $ expand es una lista de propiedades de navegación separadas por comas. Además, cada propiedad de navegación puede ir seguida de una barra diagonal y otra propiedad de navegación para permitir la identificación de una relación de varios niveles.