Cómo: Usar rutas de la consulta para dar forma a los resultados (Entity Framework)

En este tema se proporciona un ejemplo de cómo especificar una ruta de la consulta que defina qué objetos relacionados se devuelven cuando se consulta un objeto concreto en un modelo conceptual. La consulta de este ejemplo devuelve un único objeto Contact y todos los objetos SalesOrderHeader y SalesOrderDetail relacionados.

Para especificar la ruta de acceso de una consulta, pase una representación de cadena del gráfico de objetos al método Include en ObjectQuery. El método Include se puede aplicar en cualquier consulta de Entity Framework : LINQ to Entities , Entity SQL o método de generador de consultas.

El ejemplo de este tema se basa en el modelo AdventureWorks Sales. Para ejecutar el código de este tema, debe haber agregado el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para que use Entity Framework. Para obtener más información, vea Cómo: Usar el Asistente para Entity Data Model (Entity Framework) o Cómo: Configurar manualmente un proyecto de Entity Framework y Cómo: Definir manualmente un modelo Entity Data Model (Entity Framework).

Ejemplo

En este siguiente ejemplo se especifica una ruta de acceso de consulta que devuelve un objeto Contact y los objetos SalesOrderHeader y SalesOrderDetail relacionados.

Using context As New AdventureWorksEntities()
    ' Define a LINQ query with a path that returns 
    ' orders and items for a contact. 
    Dim contacts = (From contact In context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails") _
        Select contact).FirstOrDefault()

    ' Execute the query and display information for each item 
    ' in the orders that belong to the contact. 
    For Each order As SalesOrderHeader In contacts.SalesOrderHeaders
        Console.WriteLine(String.Format("PO Number: {0}", order.PurchaseOrderNumber))
        Console.WriteLine(String.Format("Order Date: {0}", order.OrderDate.ToString()))
        Console.WriteLine("Order items:")
        For Each item As SalesOrderDetail In order.SalesOrderDetails
            Console.WriteLine(String.Format("Product: {0} Quantity: {1}", _
                                              item.ProductID.ToString(), item.OrderQty.ToString()))
        Next
    Next
End Using
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Define a LINQ query with a path that returns 
    // orders and items for a contact.
    var contacts = (from contact in context.Contacts
                  .Include("SalesOrderHeaders.SalesOrderDetails")
                    select contact).FirstOrDefault();

    // Execute the query and display information for each item 
    // in the orders that belong to the contact.
    foreach (SalesOrderHeader order in contacts
        .SalesOrderHeaders)
    {
        Console.WriteLine(String.Format("PO Number: {0}",
            order.PurchaseOrderNumber));
        Console.WriteLine(String.Format("Order Date: {0}",
            order.OrderDate.ToString()));
        Console.WriteLine("Order items:");
        foreach (SalesOrderDetail item in order.SalesOrderDetails)
        {
            Console.WriteLine(String.Format("Product: {0} "
                + "Quantity: {1}", item.ProductID.ToString(),
                item.OrderQty.ToString()));
        }
    }
}

El método Include devuelve el objeto de consulta, y puede llamar varias veces a este método en una ObjectQuery para incluir entidades de varias relaciones, como en el ejemplo siguiente.

' Create a SalesOrderHeader query with two query paths, 
' one that returns order items and a second that returns the 
' billing and shipping addresses for each order. 
Dim query As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address")
// Create a SalesOrderHeader query with two query paths, 
// one that returns order items and a second that returns the 
// billing and shipping addresses for each order.
ObjectQuery<SalesOrderHeader> query =
    context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address");

Vea también

Tareas

Cómo: Ejecutar una consulta que devuelva objetos de tipo de entidad (Entity Framework)
Cómo navegar por las relaciones mediante propiedades de navegación (Entity Framework)

Conceptos

Cargar objetos relacionados (Entity Framework)
Métodos del Generador de consultas (Entity Framework)
LINQ to Entities
Información general de Entity SQL