Partager via


Comment : Étendre une requête à l'aide du code

Si vous voulez modifier une requête au delà des fonctions du concepteur de requêtes, vous pouvez étendre la requête en écrivant du code.

Visual Studio LightSwitch combine les conditions que vous spécifiez dans le concepteurde requête avec celles que vous spécifiez dans votre code pour produire le résultat de la requête.Pour plus d'informations, consultez Requêtes : récupération d'informations à partir d'une source de données.

[!REMARQUE]

Vous ne pouvez pas étendre la requête d'un écran.Vous pouvez étendre uniquement des requêtes qui s'affichent dans l'explorateur de solutions.Pour plus d'informations sur la modification de la requête d'un écran, consultez Comment : filtrer des données dans un écran Silverlight.

Pour étendre une requête à l'aide de code

  1. Ouvrez une requête dans le Concepteur de requêtes.Pour plus d'informations, consultez Comment : Ajouter, supprimer et modifier une requête.

  2. Dans la fenêtre Propriétés, cliquez sur Modifier le code de requête additionnel.

    Le fichier de code du serveur s'ouvre dans l'éditeur de code.Une méthode représentant votre requête s'affiche dans le fichier de code.Le nom de la méthode commence par le nom de votre requête et se termine par le mot _PreprocessQuery.Par exemple, si le nom de votre requête est GetCustomers, le nom de la méthode qui s'affiche dans l'éditeur de code est GetCustomers_PreprocessQuery.

  3. Personnalisez la requête en ajoutant du code à cette méthode.Utilisez la syntaxe LINQ.Pour plus d'informations sur l'écriture de requêtes LINQ en Visual Basic, consultez Mise en route de LINQ dans Visual Basic.Pour plus d'informations sur l'écriture de requêtes en C#, consultez Mise en route de LINQ en C#.

Exemples

Les exemples suivants affichent deux façons de modifier une requête à l'aide de code.

Ff852040.collapse_all(fr-fr,VS.110).gifLes N meilleurs clients selon les commandes

La requête suivante retourne les clients qui ont passé le plus grand nombre de commandes.Un paramètre nommé TopN est passé dans la méthode.Le paramètre TopN specifie le nombre de clients à retourner dans le résultat.

[!REMARQUE]

Ajoutez des paramètres dans le concepteur de requête.

Private Sub TopNSalesOrders_PreprocessQuery _
    (ByVal TopN As System.Nullable(Of Short), _
     ByRef query As System.Linq.IQueryable(Of LS_Queries_VB.Customer))
    query = From myCustomer In query
           Where myCustomer.Orders.Count > 0
           Select myCustomer
           Order By myCustomer.Orders.Count Descending
           Take (TopN)
End Sub
partial void TopNSalesOrders_PreprocessQuery
    (short? TopN, ref IQueryable<Customer> query)
{
    query = (from myCustomer in query
             where myCustomer.Orders.Count() > 0
             orderby myCustomer.Orders.Count() descending
             select myCustomer).Take(System.Convert.ToInt16(TopN));
}

Vous ne pouvez pas concevoir cette requête en utilisant le concepteur de requêtes pour les raisons suivantes:

  • Les commandes s'affichent sur le côté many de la relation client-commande.Le concepteur de requêtes vous empêche de référencer des entités associées qui ont une multiplicité de many.

  • La requête compte les commandes à l'aide de l'opération Count.Le concepteur de requêtes ne prend pas en charge les opérations telles que Count, Aggregate et Sum.

Ff852040.collapse_all(fr-fr,VS.110).gifTous les clients qui ont acheté un produit spécifique

La requête suivante retourne tous les clients qui ont acheté un produit spécifique en parcourant plusieurs relations one-to-many.

Private Sub CustomersWhoBoughtProduct_PreprocessQuery _
    (ByVal ProductID As System.Nullable(Of Short), _
     ByRef query As System.Linq.IQueryable(Of LS_Queries_VB.Customer))
    query = From myCustomers In query
        From myOrders In myCustomers.Orders
        From myOrderDetails In myOrders.Order_Details
        Where myOrderDetails.Product.ProductID = ProductID
        Select Customers
End Sub
partial void CustomersWhoBoughtProduct_PreprocessQuery
    (short? ProductID, ref IQueryable<Customer> query)
{
    query = from myCustomers in query
            from myOrders in myCustomers.Orders
            from myOrderDetails in myOrders.Order_Details
            where myOrderDetails.Product.ProductID == ProductID
            select myCustomers;
}

Vous ne pouvez pas concevoir cette requête à l'aide du concepteur de requêtes, car celui-ci vous empêche de référencer des entités associées qui ont une multiplicité de many.

Étapes suivantes

Pour apprendre à concevoir une requête visuellement, consultez Comment : Concevoir une requête à l'aide du concepteur de requêtes.

Pour apprendre à utiliser une requête dans un écran, consultez Comment : filtrer des données dans un écran Silverlight.

Pour apprendre comment exécuter une requête dans le code personnalisé que vous ajoutez à une application, consultez Comment : Récupérer les données d'une requête à l'aide du code.

Voir aussi

Tâches

Comment : Ajouter, supprimer et modifier une requête

Autres ressources

Requêtes : récupération d'informations à partir d'une source de données

Mise en route de LINQ en C#

Mise en route de LINQ dans Visual Basic

LINQ en Visual Basic