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

ADO.NET Data Services: differenze tra Execute(Of T) e CreateQuery(Of T)

Nelle varie trattazioni sugli ADO.NET Data Services, in particolare nella serie di miei articoli pubblicati su Visual Basic Tips & Tricks, ho sempre fatto ricorso al metodo Execute(Of T) per interrogare, lato client, i dati esposti dal servizio inviando una richiesta Http in base alla query string specificata.

In realtà, la classe DataServiceContext espone un altro metodo per interrogare i dati, che si chiama CreateQuery(Of T). Sostanzialmente Execute e CreateQuery fanno la stessa cosa: entrambi interrogano un EntitySet, ma ci sono alcune differenze. Vediamo alcune righe di codice, che interrogano l'insieme Orders esposto da un Entity Data Model generato per il database Northwind:

        'CreateQuery(Of T)

        Dim query As DataServiceQuery(Of Orders) = NorthwindDataService.CreateQuery(Of Orders)("/Orders")

 

        'Execute(Of T)

        Dim query As IEnumerable(Of Orders) = _

                     NorthwindDataService.Execute(Of Orders)(New Uri("/Orders?orderby=OrderDate", UriKind.Relative))

 

        'CreateQuery(Of T) con AddQueryOption

        Dim query As DataServiceQuery(Of Orders) = _

                     NorthwindDataService.CreateQuery(Of Orders)("/Orders").AddQueryOption("?orderby", "OrderDate")

Da quando esiste l'inferenza del tipo la utilizzo sempre, ma in questo caso non l'ho utilizzata per mettere in risalto le differenze tra i due metodi. In particolare balza all'occhio che:

  1. CreateQuery restituisce una DataServiceQuery(Of T), mentre Execute restituisce una IEnumerable(Of T);
  2. CreateQuery riceve, come argomento, una stringa che corrisponde all'EntitySet da interrogare, mentre Execute riceve un tipo Uri;
  3. CreateQuery non consente di formulare una query string completa, al contrario di Execute, ma riceve solo il nome dell'entità. Come alternativa, si può usare un metodo della classe DataServiceQuery chiamato AddQueryOption per formulare un'interrogazione più complessa sull'EntitySet.

Sulla base delle differenze sopra esposte potrete poi scegliere il metodo che preferite per inviare le richieste al servizio.

Alessandro

Print | posted on domenica 19 aprile 2009 17:58 | Filed Under [ WCF Data Services/WCF RIA Services/OData ]

Powered by:
Powered By Subtext Powered By ASP.NET