Linq è stata una delle intuizioni di Microsoft che ha cambiato maggiormente il modo di sviluppare applicazioni connesse a dati.
Tramite Linq è possibile utilizzare un linquaggio simile a SQL direttamente nel codice gestito vb.net o c#.
Per iniziare abbiamo bisogno di un tramite, un'nterfaccia che ci permetta di trasformare le istruzioni linq che scriveremo, in T-SQL. Linq To SQL mette a disposizione le classi DataContext, che hanno appunto questo scopo, tramite un tool per lo sviluppo visuale è possibile importare direttamente da esplora server le tabelle che vogliamo interfacciare, e la classe in runtime genererà dinamicamente le istruzioni SQL e si connetterà al database per eseguirle.
SELECT
A parte una leggera differenza nella posizione delle parole chiave, le istruzioni linq per la lettura di dati, hanno lo stesso funzionamento di una select scritta in SQL con la differenza che abbiamo a disposizione tutti i metodi e properietà del framework (conversioni, manipolazione stringhe, metodi personalizzati ...)
Dim clientiLeccesi = From c In DB.Clienti Where c.città = "Lecce" Select c
questa query permette di ritrovare tutti i clienti di Lecce.
Oltre a parole chiave nuove, una cosa che si può notare è che a dispetto di "Option Strict On" il tipo delle variabili non viene specificato. Questo miracolo è possibile grazie all'introduzione dei tipi anonimi, ma questa è un'altra storia (probabilmente saranno oggetto di un'altro post), quello che ci interessa sapere è che "clientiLeccesi" non contiene il risultato della query, ma la query stessa. In pratica l'istruzione "From" non viene eseguita durante la dichiarazione, ma nel momento in cui si accede ai valori di clientiLeccesi. Questa è una cosa da tener sempre presente, in quanto potremmo ottenere risultati diversi da quelli che ci aspetteremmo, se per esempio subito dopo la dichiarazione della query, andassimo a modificare i dati del db.
SELECT SINGOLA RIGA
Questa estensione di Linq ci permette di ottenere un singolo elemento dalla collezione
Dim idcliente As int32 = 12
Dim cliente = clienti.Single(Function(c) c.id = idcliente)
come possiamo notare, nella versione 9 di vb, sono state introdotte le Lambda Expression, che in questo caso ci permette di specificare quale cliente vogliamo ottenere.
INSERT INTO
In ogni operazione di modifica dei dati, le istruzioni non vengono eseguite fino a che non viene richiamato il metodo SubmitChanges() del dataContext. Così per inserire un nuovo cliente abbiamo:
Dim c = New clienti
c.Nome = "Paperone"
c.Cognome = "De Paperoni"
c.città = "Paperopoli"
DBDataContext.clienti.InsertOnSubmit(c)
DBDataContext.SubmitChanges()
a questo punto se id cliente e di tipo identity, e quindi viene generato automaticamente, subito dopo la chiamata SubmitChanges(), possiamo conoscere l'id semplicemente leggendolo :
label1.text = c.id
UPDATE
Per emodificare i dati, possiamo utilizzare le stesse tecniche che utilizzeremmo se il db fosse una classe in memoria (e in effetti il dataContex lo è).
dim c = clienti.Single(Function(c) c.id = idcliente)
c.nome = c.nome.ToUpper
c.cognome = "ROSSI"
DBDataContext.SubmitChanges()
le modifiche apportate a c vengono automaticamente riflesse al database durante la chiamata SubmitChanges()
DELETE
dim c = clienti.Single(Function(c) c.id = idcliente)
DBDataContext.DeleteOnSubmit(c)
DBDataContext.SubmitChanges()
L'eliminazione di dati avviene semplicemente richiamando il metodo DeleteOnSubmit(), naturalmente seguito da SubmitChanges()
Per questo post abbiamo finito, ma tratterò di nuovo quest'argomento in seguito, per ora spero che sia sufficente a colmare almeno in minima parte la carenza di info in rete sull'utilizzo di Linq con VB.net.
0 commenti:
Posta un commento