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 sono solo syntactic Sugar?

Se qualcuno fosse convinto che le lambda expression sono solamente Syntactic Sugar per esprimere delegate anonimi potrà essere piacevolmente sorpreso da questo esempio in LINQ to SQL.

FirstTestDataContext context = new FirstTestDataContext(); context.Log = Console.Out; IEnumerable<Customer> custs = context.Customers .Where(C => C.CustomerID.StartsWith("A")); Console.WriteLine("Recuperati {0} oggetti Customer", custs.Count()); custs = context.Customers .Where(delegate(Customer C) { return C.CustomerID.StartsWith("A"); }); Console.WriteLine("Recuperati {0} oggetti Customer", custs.Count());

 

In sostanza la prima query usa una lambda expression del tipo C => C.CustomerID.StartsWith("A") e la seconda usa invece un delegate anonimo ma il codice è lo stesso. Osserviamo le query che vengono eseguite.

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[Contact itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Cou try], [t0].[Phone], [t0].[Fax] FROM [dbo].[Customers] AS [t0] WHERE [t0].[CustomerID] LIKE @p0 -- @p0: Input NVarChar (Size = 2; Prec = 0; Scale = 0) [A%] -- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8 Recuperati 4 oggetti Customer SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[Contact itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Cou try], [t0].[Phone], [t0].[Fax] FROM [dbo].[Customers] AS [t0] -- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.21022.8

Come si può facilmente vedere la prima query che fa uso di lambda expression è molto efficiente perchè effettua direttamente una query con l'operatore LIKE, mentre la seconda recupera tutti gli oggetti customer dal database e poi li filtra con il delegate anonimo che è stato definito.

Lascio a voi il capire il perchè ;), ma questo basti per far capire che una lambda expression è qualcosa di più che "Syntactic Sugar".

Alk.

Print | posted on martedì 12 febbraio 2008 15:44 | Filed Under [ LINQ ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET