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.
Tramite Visual Studio LightSwitch vengono combinate 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 LINQ in Visual Basic. 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 in 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 Progettazione query per i motivi seguenti:
Gli ordini vengono visualizzati dal lato molti della relazione cliente-ordine. Con Progettazione query viene impedito all'utente di fare riferimento alle entità correlate che dispongono di una molteplicità Molti.
Tramite la query vengono contati gli ordini utilizzando l'operazione Count. Progettazione query non supporta l'utilizzo di operazioni come Count, Aggregate e Sum.
Tutti i clienti che hanno acquistato un prodotto specifico
Tramite la query seguente vengono restituiti tutti i clienti che hanno acquistato 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 Progettazione query poiché impedisce all'utente di fare riferimento alle entità correlate che dispongono di una molteplicità Molti.
Passaggi successivi
Per informazioni su come progettare visivamente una query, vedere Procedura: progettare una query utilizzando Progettazione query.
Per informazioni su come utilizzare una query in una schermata, vedere Procedura: filtrare i dati in una schermata di Silverlight.
Per informazioni su 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