Condividi tramite


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

  1. Aprire una query in Progettazione query.Per ulteriori informazioni, vedere Procedura: aggiungere, rimuovere e modificare una query.

  2. 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.

  3. 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.

Ff852040.collapse_all(it-it,VS.110).gifGli 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.

Ff852040.collapse_all(it-it,VS.110).gifTutti 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

Nozioni di base su LINQ in C#

“Introduzione a” and “Guida Introduttiva”

LINQ in Visual Basic