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

LINQ

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()...

posted @ martedì 12 febbraio 2008 19:40 | Feedback (0) | Filed Under [ LINQ ]

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

posted @ martedì 12 febbraio 2008 14:44 | Feedback (3) | Filed Under [ LINQ ]

Linq to Sql: Usare mapping file invece di attributi

Utilizzando il designer le vostre classi di accesso ai dati conterranno una serie di attributi necessari affinche Linq to Sql possa gestire le operazioni di persistenza dei dati. Se non amate gli attributi e preferite invece file di mapping xml la soluzione è utilizzare l'utility SqlMetal.exe fornita con visual studio, che vi permette di generare tutte le classi per un intero database. Ecco ad esempio come generare tutto il dominio per il database NorthWind sqlmetal /server:LAPTOPVM1SQLEXPRESS /database:northwind /map:NorthwindVer1.map /code:NorthwindVer1.cs La sintassi è veramente facile, basta infatti specificare il nome del server, il database ed i nomi dei file da...

posted @ martedì 12 febbraio 2008 10:13 | Feedback (0) | Filed Under [ LINQ ]

LINQ, le prime impressioni

Dopo avere giocato con Linq to entities e linq to xml (che trovo veramente comodo) ho iniziato a giocare con LINQ to SQL. Debbo dire che le prime impressioni sono decisamente buone, il prodotto è sicuramente molto valido e vale la pena guardarlo. La prima considerazione che mi è venuta guardando le classi generate è la trasparenza rispetto all'ORM, utilizzando le oramai straconosciute Customers e Orders del database Northwind, si nota infatti che la relazione è fatta utilizzando due classi speciali la EntityRef<T> e la EntitySet<T>. Queste due classi sono automaticamente utilizzate dal designer per gestire i riferimenti, mentre NHibernate...

posted @ martedì 12 febbraio 2008 09:16 | Feedback (0) | Filed Under [ LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET