Procédure : exécuter une requête qui retourne un type anonyme (Entity Framework)

Cette rubrique fournit des exemples d'exécution de requêtes qui retournent une collection d'instances d'un type anonyme, par exemple, collection, ligne et référence. Dans ces exemples, le résultat de la requête est une collection de types row. Pour plus d'informations, voir Système de type (Entity SQL). Le même exemple est repris en utilisant chacune des technologies de requête Entity Framework suivantes :

  • LINQ to Entities

  • Entity SQL avec ObjectQuery<T>

  • Méthodes du Générateur de requêtes d'ObjectQuery<T>

Les exemples de cette rubrique sont basés sur le modèle de vente Adventure Works Sales Model. Pour exécuter le code de cet exemple, vous devez déjà avoir ajouté le modèle de vente AdventureWorks Sales Model à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour ce faire, exécutez les procédures décrites dans Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement un modèle EDM (Entity Data Model) (Entity Framework). Vous pouvez également définir le modèle de vente AdventureWorks Sales Model à l'aide de l'Assistant EDM. Pour plus d'informations, voir Procédure : utiliser l'Assistant Entity Data Model (Entity Framework).

Exemple

L'exemple ci-dessous utilise LINQ to Entities.

Using AWEntities As New AdventureWorksEntities
    Dim products As ObjectQuery(Of Product) = AWEntities.Product

    Dim query = _
        From product In products _
        Select New With _
        { _
            .ProductId = product.ProductID, _
            .ProductName = product.Name _
        }

    Console.WriteLine("Product Info:")
    For Each productInfo In query
        Console.WriteLine("Product Id: {0} Product name: {1} ", _
                productInfo.ProductId, productInfo.ProductName)
    Next
End Using
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
    ObjectQuery<Product> products = AWEntities.Product;
    var query =
        from product in products
        select new
        {
            ProductId = product.ProductID,
            ProductName = product.Name
        };

    Console.WriteLine("Product Info:");
    foreach (var productInfo in query)
    {
        Console.WriteLine("Product Id: {0} Product name: {1} ",
            productInfo.ProductId, productInfo.ProductName);
    }
}

L'exemple ci-dessous utilise Entité SQL.

Using advWorksContext As AdventureWorksEntities = New AdventureWorksEntities
    Dim commandText As String = "SELECT p.ProductID, p.Name FROM " & _
        "AdventureWorksEntities.Product as p"

    Try
        Dim query As New ObjectQuery(Of DbDataRecord)(commandText, advWorksContext)

        For Each result As DbDataRecord In query
            Console.WriteLine("ID {0} Name {1}", result.Item(0), result.Item(1))
        Next
    Catch ex As EntityException
        Console.WriteLine(ex.ToString())
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Using
using (AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities())
{
    string myQuery = @"SELECT p.ProductID, p.Name FROM 
        AdventureWorksEntities.Product as p";
    try
    {
        foreach (DbDataRecord rec in
            new ObjectQuery<DbDataRecord>(myQuery, advWorksContext))
        {
            Console.WriteLine("ID {0}; Name {1}", rec[0], rec[1]);
        }
    }
    catch (EntityException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

L'exemple ci-dessous utilise la méthode du Générateur de requêtes.

Using advWorksContext As AdventureWorksEntities = _
    New AdventureWorksEntities

    Try
        ' Use the Select method to define the projection.
        Dim query As ObjectQuery(Of DbDataRecord) = _
            advWorksContext.Product.Select("it.ProductID, it.Name")

        ' Iterate through the collection of data rows.
        For Each result As DbDataRecord In query
            Console.WriteLine("ID{0}: Name {1}", _
                              result.Item(0), result.Item(1))
        Next

    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    End Try
End Using
using (AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities())
{
    try
    {
        // Use the Select method to define the projection.
        ObjectQuery<DbDataRecord> query =
            advWorksContext.Product.Select("it.ProductID, it.Name");

        // Iterate through the collection of data rows.
        foreach (DbDataRecord rec in query)
        {
            Console.WriteLine("ID {0}; Name {1}", rec[0], rec[1]);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Voir aussi

Tâches

Procédure : exécuter une requête qui retourne un type d'entité (Entity Framework)
Procédure : exécuter une requête qui retourne un type primitif (Entity Framework)
Procédure : exécuter une requête paramétrable (Entity Framework)

Concepts

Méthodes du Générateur de requêtes (Entity Framework)

Autres ressources

Interrogation d'un modèle EDM (Tâches Entity Framework)