Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Lambda expression ed expression Tree

Nel precedente post ho mostrato come le lambda expression non sono assolutamente la stessa cosa che un delegate anonimo, la ragione è che il compilatore può tradurre una lambda expression in due modi molto differenti, il primo è semplice codice IL, proprio come un delegate anonimo, mentre il secondo è un Expression Tree. La IQueryable, che è l'interfaccia utilizzata da LINQ to SQL, accetta quindi nel where due cose distinte, un delegate di tipo Func<T, Boolean> oppure un Expression<Func<T, Boolean>>, il compilatore se presente preferisce sempre compilare con una Expression, ecco perchè LINQ2SQL è in grado di tradurre lo StartsWith() con un LIKE.

La conferma come sempre è nell'IL generato.

image

 

Senza andare in dettaglio dalla lambda come potete vedere viene generata una Expression, differente è il caso del delegate

image

MEntre un delegate è un insieme di istruzioni IL da cui LINQ2SQL non può capire nulla, un expression tree è un oggetto complesso che al suo interno contiene tutte le informazioni sull'espressione e quindi permette a LINQ2SQL di capire cosa fare.

alk.

Technorati Tags: ,

Print | posted on martedì 12 febbraio 2008 20:40 | Filed Under [ LINQ ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET