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
Ouvrez une requête dans le Concepteur de requêtes.Pour plus d'informations, consultez Comment : Ajouter, supprimer et modifier une requête.
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.
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.
Les 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.
Tous 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