Share via


Procedura: utilizzare percorsi di query per influenzare i risultati (Entity Framework)

In questo argomento viene fornito un esempio che illustra come specificare un percorso della query per definire gli oggetti correlati restituiti quando viene eseguita una query su un oggetto specifico in un modello concettuale. La query in questo esempio restituisce un singolo oggetto Contact e tutti gli oggetti SalesOrderHeader e SalesOrderDetail correlati.

Per specificare il percorso della query, passare una rappresentazione di stringa dell'oggetto grafico al metodo Include su ObjectQuery. Il metodo Include può essere applicato a qualsiasi query Entity Framework : LINQ to Entities , Entity SQL o metodo del generatore di query.

L'esempio incluso in questo argomento è basato sul modello Sales di AdventureWorks. Per eseguire il codice incluso in questo argomento, è necessario avere già aggiunto il modello Sales di AdventureWorks al progetto e avere configurato il progetto per l'utilizzo di Entity Framework. Per ulteriori informazioni, vedere Procedura: utilizzare la Procedura guidata Entity Data Model (Entity Framework) o Procedura: configurare manualmente un progetto di Entity Framework e Procedura: definire manualmente un modello EDM (Entity Framework).

Esempio

Nell'esempio seguente viene specificato un percorso di query che restituisce un oggetto Contact e gli oggetti SalesOrderHeader e SalesOrderDetail correlati.

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()));
        }
    }
}

Il metodo Include restituisce l'oggetto query e può essere chiamato più volte su un oggetto ObjectQuery per includere entità di più relazioni, come nell'esempio seguente:

' 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");

Vedere anche

Attività

Procedura: eseguire una query che restituisce oggetti di tipo entità (Entity Framework)
Procedura: spostarsi nelle relazioni utilizzando le proprietà di navigazione (Entity Framework)

Concetti

Caricamento di oggetti correlati (Entity Framework)
Metodi del generatore di query (Entity Framework)
LINQ to Entities
Panoramica su Entity SQL