Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Paging in LINQ to Entities con Visual Basic 2008

In LINQ-to-Entities, il provider LINQ per dialogare con ADO.NET Entity Framework, il paging avviene in maniera sostanzialmente uguale a LINQ to SQL, quindi utilizzando le clausole Skip e Take che già conosciamo, con una importante differenza: in LINQ to Entities i due operatori citati debbono essere preceduti da una clausola Order By altrimenti il runtime solleva una NotSupportedException. Facciamo un piccolo esempio: ipotizziamo di aver già creato un Entity Data Model in un’applicazione Console che rappresenti in forma object oriented alcune tabelle del database Northwind, come ad esempio Customers e Orders. Vogliamo ottenere l’elenco degli ordini effettuati da un dato cliente e su questi eseguire la paginazione.

 

Considerate il seguente metodo:

 

    Function GetOrdersByCustomerID(ByVal CustomerID As String) As IQueryable(Of Orders)

 

        Dim northwindContext As New NORTHWNDEntities

 

        ‘Compila, ma a runtime solleva eccezione

        Dim query = From order In northwindContext.Orders _

                  Where order.Customers.CustomerID = CustomerID _

                  Skip 2 Take 5

 

        Return query

    End Function

 

Se ora proviamo a chiamarlo, per esempio tramite un ciclo di iterazione, come nel modo seguente:

 

        Dim ord = GetOrdersByCustomerID("BERGS")

 

        For Each order In ord

            Console.WriteLine(order.OrderID)

        Next

 

il risultato che otterremo in fase di esecuzione è il seguente:

 

 

L’eccezione è abbastanza esplicativa, quindi ci permette di correggere il tiro nel modo che segue:

 

    Function GetOrdersByCustomerID(ByVal CustomerID As String) As IQueryable(Of Orders)

 

        Dim northwindContext As New NORTHWNDEntities

 

        Dim query = From order In northwindContext.Orders _

                  Where order.Customers.CustomerID = CustomerID _

                  Order By order.OrderDate _

                  Skip 2 Take 5

 

        Return query

    End Function

 

Il codice funzionerà ora correttamente e scarterà i primi due ordini per recuperare i successivi 5.

 

Alessandro

Print | posted on venerdì 12 dicembre 2008 01:53 | Filed Under [ Visual Basic LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET