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.