WinFX: WCF, WWF, Linq, WinFS

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Linq è disponibile in due varianti, che sono DLinq e XLinq, che come il nome stesso suggerisce sono dedicate rispettivamente all'accesso ai dati da database ed a file XML, ed il suo obiettivo principale è quello di fornire un approccio generico a prescindere dalla base dati sottostante, con l'aggiunta di funzioni che non sono legate a database, file XML o custom collection.

Il vantaggio è dunque che Linq, che racchiude un linguaggio per interrogare questi oggetti, non è legato ad uno scenario specifico, ma può essere sfruttato ogni volta che sia necessario interrogare un oggetto.

Ecco ad esempio come C# 3.0 consente di fare una query sul database Northwind:

var customers = (
    from c in db.Customers
    where c.City == "London"
    select c )
    .Including(c => c.Orders
    .Including(o => o.OrderDetails
    .Including(od => od.Product)));

Questa query estrarrà i dati che sono presenti nella tabella "Customers", includendo solo quei valori che abbiamo nel campo "City" come valore "London" e soprattutto creando le relazioni con le tabelle Orders, OrderDetails e Product.

L'istruzione .Including ha l'effetto di includere nella query anche i dati presi dalle tabelle specificate e grazie all'uso degli anonymous type, altra novità di C# 3.0, l'approccio ai dati estratti è strongly-typed:

foreach (var customer in customers) {
        foreach (var order in customer.Orders) {
            foreach (var orderDetail in order.OrderDetails) {
                Console.WriteLine("{0}|{1}|{2}|{3}",
                customer.CustomerID,
                ord.erOrderID,
                orderDetail.ProductID,
                orderDetail.Product.ProductName);
            }
        }
    }

Come si può notare l'approccio è anche chiaramente type safe e stiamo accedendo all'oggetto Product contenuto nell'oggetto OrderDetail andando a leggerne la proprietà ProductName.

Ovviamente il risultato è quello che DLinq, che è la parte per l'accesso ai database, ha creato per noi le query SQL e l'ha eseguita in SQL Server, valorizzando i vari oggetti. Linq ha anche una componente ORM, ma il suo vero vantaggio è quello di definire una sintassi per interrogare i dati davvero intuitiva.

Tuttavia Linq si basa su un mapping 1:1 tra la struttura del database e le classi, rendendolo meno potente di tanti ORM sul mercato, che invece consentono di definire un mapping esplicito. Questo garantisce, ad esempio, di mantenere le funzionalità degli oggetti anche se il formato della tabella o il tipo di database dovesse cambiare nel tempo, cosa che invece DLinq non consente. Chiaramente è solo una preview (che è disponibile anche per VB9) ed è probabile che sarà soggetta a cambiamenti. E' però importante sottolineare che se noi avessimo avuto i nostri oggetti Customers o Orders, definiti come classi in file separati, l'approccio all'estrazione dei dati mostrata qualche riga più su sarebbe rimasta esattamente la stessa.

In chiusura, Linq è una tecnologia molto interessante, anche perché Microsoft sembra intenzionata a rilasciare delle estensioni per rendere possibile l'interrogazione anche di altri store, come Active Directory o WinFS, con l'indubbio vantaggio per noi sviluppatori di semplificare, e di non poco, le conoscenze richieste per ricavare informazioni dagli storage più disparati.

Le specifiche ed alcune preview sono disponibili sia per C# 3.0 che per VB 9.

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC