Procedura: estendere una query tramite codice
Se si desidera modificare una query in modalità che vanno oltre le funzionalità di progettazione query, è possibile estendere la query scrivendo il codice.
Visual Studio LightSwitch combina le condizioni specificate in progettazione query con le condizioni specificate nel codice per produrre il risultato della query.Per ulteriori informazioni, vedere Query: recupero di informazioni da un'origine dati.
[!NOTA]
Non è possibile estendere la query di una schermata.È possibile estendere solo le query visualizzate in Esplora soluzioni.Per ulteriori informazioni sulla modifica della query di una schermata, vedere Procedura: filtrare i dati in una schermata di Silverlight.
Per estendere una query tramite il codice
Aprire una query in Progettazione query.Per ulteriori informazioni, vedere Procedura: aggiungere, rimuovere e modificare una query.
Nella finestra Proprietà, fare clic su Modifica codice query aggiuntivo.
Il file di codice del server viene aperto nell'Editor di codice.Un metodo che rappresenta la query viene visualizzato nel file di codice.Il nome del metodo inizia con il nome della query e termina con la parola _PreprocessQuery.Ad esempio, se il nome della query è GetCustomers, il nome del metodo visualizzato nell'Editor di codice è GetCustomers_PreprocessQuery.
Personalizzare la query aggiungendo il codice a questo metodo.Utilizzare la sintassi LINQ.Per ulteriori informazioni su come scrivere query LINQ in Visual Basic, vedere “Introduzione a” and “Guida Introduttiva”.Per ulteriori informazioni su come scrivere query in C#, vedere Nozioni di base su LINQ in C#.
Esempi
Negli esempi seguenti vengono mostrati due modi per modificare una query tramite il codice.
Gli N migliori clienti in base agli ordini di vendita
La query seguente restituisce i clienti che hanno emesso il maggior numero di ordini.Un parametro denominato TopN viene passato nel metodo.Il parametro TopN specifica il numero di clienti da restituire nel risultato.
[!NOTA]
Aggiungere i parametri nella progettazione query.
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));
}
Non è possibile progettare questa query tramite la progettazione query per i motivi seguenti:
Gli ordini vengono visualizzati dal lato della relazione cliente-ordine.La progettazione query impedisce all'utente di fare riferimento alle entità correlate che dispongono di una molteplicità Molti.
La query conta gli ordini utilizzando l'operazione Count.La progettazione query non supporta l'utilizzo di operazioni come Count, Aggregatee Sum.
Tutti i clienti che hanno acquistato un prodotto specifico
La query seguente restituisce tutti i clienti che acquistano un prodotto specifico spostandosi tra diverse relazioni uno-a-molti.
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;
}
Non è possibile progettare questa query utilizzando la progettazione query poiché questa impedisce all'utente di fare riferimento alle entità correlate che dispongono di una molteplicità Molti.
Passaggi successivi
Per imparare come progettare visivamente una query, vedere Procedura: progettare una query utilizzando Progettazione query.
Per imparare come utilizzare una query in una schermata, vedere Procedura: filtrare i dati in una schermata di Silverlight.
Per imparare come eseguire una query all'interno del codice personalizzato aggiunto a un'applicazione, vedere Procedura: recuperare dati da una query tramite codice.
Vedere anche
Attività
Procedura: aggiungere, rimuovere e modificare una query
Altre risorse
Query: recupero di informazioni da un'origine dati