Ler em inglês

Partilhar via


Como executar uma consulta que retorna coleções aninhadas

Isso mostra como executar um comando em um modelo conceitual usando um EntityCommand objeto e como recuperar os resultados da coleção aninhada usando um EntityDataReaderarquivo .

Para executar o código neste exemplo

  1. Adicione o Modelo de Vendas AdventureWorks ao seu projeto e configure seu projeto para usar o Entity Framework. Para obter mais informações, consulte Como usar o Assistente de Modelo de Dados de Entidade.

  2. Na página de código do seu aplicativo, adicione as seguintes using diretivas (Imports no Visual Basic):

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Common;
    using System.Data.EntityClient;
    using System.Data.Metadata.Edm;
    

Exemplo

Uma coleção aninhada é uma coleção que está dentro de outra coleção. O código a seguir recupera uma coleção e Contacts as coleções aninhadas associadas SalesOrderHeaders a cada Contact.

using (EntityConnection conn =
    new EntityConnection("name=AdventureWorksEntities"))
{
    conn.Open();
    // Create an EntityCommand.
    using (EntityCommand cmd = conn.CreateCommand())
    {
        // Create a nested query.
        string esqlQuery =
            @"Select c.ContactID, c.SalesOrderHeaders
        From AdventureWorksEntities.Contacts as c";

        cmd.CommandText = esqlQuery;
        // Execute the command.
        using (EntityDataReader rdr =
            cmd.ExecuteReader(CommandBehavior.SequentialAccess))
        {
            // The result returned by this query contains
            // ContactID and a nested collection of SalesOrderHeader items.
            // associated with this Contact.
            while (rdr.Read())
            {
                // the first column contains Contact ID.
                Console.WriteLine("Contact ID: {0}", rdr["ContactID"]);

                // The second column contains a collection of SalesOrderHeader
                // items associated with the Contact.
                DbDataReader nestedReader = rdr.GetDataReader(1);
                while (nestedReader.Read())
                {
                    Console.WriteLine("   SalesOrderID: {0} ", nestedReader["SalesOrderID"]);
                    Console.WriteLine("   OrderDate: {0} ", nestedReader["OrderDate"]);
                }
            }
        }
    }
    conn.Close();
}

Consulte também