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],...