Linq è l’acronimo di Language Integraqted Query, in parole molto semplici con lo stesso codice è possibile elaborare ed effettuare query su diverse fonti di dati
Il cuore di LINQ è composto da una seiri di API che spicecano come un object model possa essere interrogato, queste API si occupano di gestire e rendere frubili metodologie d’interrogazioni gia’ conosciuter.
I Componenti di LINQ
- /server Indica il nome del server
- /database indica il nome del database
- /user:<name> indica la username con cui collegarsi al database
- /password indica la password associata al valore di user
- /contex:<type) il nome della classe di defautl viene utilizzato il nome del database ac ui si desidera collegarsi
- /serialization:<opzioni> Genera classi serializzabili, le opzioni dispoinibili da associare a l comando sono nome e Unidirectional
Programmare LINQ
Al fine d’integrare LINQ all’interno de framewrok net sono state aggiunte deu nuove parole chiave che sono rispettivamente
- var
- from
a queste sono state associate una lista di keyword che le vanno a comporre
- where
- orderby
- in
- join
- group
- select
vediamo subito un primo esempio per il momento senza utilizzare il database.
Class program { static void Main (string[] args) { int [] nums = { 5,4 , 3, 2, 1, }; var AddOne = from n in nums select n +1; foreach (var i in addOne) { Console.WriteLine(i); } Console.ReadKey(); } }
Se per esempio vogliamo selezionari solo i valori inferiori a 5 ed in ordine decrescente dobbiamo fare
Class program { static void Main (string[] args) { int [] nums = { 5,4 , 3, 2, 1, }; var AddOne = from n in nums where n<5 orderby n descending select n +1; foreach (var i in addOne) { Console.WriteLine(i); } Console.ReadKey(); } }
Collegamento LINQ a Database
Vediamo adesso come rendere possibile il collegamento al database desiderato utilizzando il seguente codice
using System: using System.Linq; using System.Data.Linq; using nwind; Nortwind db =new Northwind (@ "Data Source=\SQLEXPRESS; Initial Catalog = NorthWind"); var custs = from c in db.Customers where c.City== "London" select c; foreach (var cust in custs) { Console.WriteLine ("{0}", cust.CompanyName); }
A questo punto è possibile fare le query a Database
,a vedoa,p tutte le possibili opzioni che permette il Linq
Linq to Objects
|
esegue delle query su array che sono presenti in memoria
|
Linq to XML
|
permette di accedere a XML utilizzando i Doom
|
Linq to DataSet
|
permette appunto a LINQ di operare tramite i DataSet
|
Linq to Sql
|
Con questo sistema si permette a LINQ di accedere a SQL SERVER
|
Linq to Entites
|
scollega il database da un qualsiasi object model
|
Lambda Expression , Expression Tree
Il linguaggio LINQ è stato introdotto grazie alle specifiche di tre linguaggi che sono stati integrati, linguaggi e motodi di programmazione per la precisione.
Lambda Expression
Le espressioni Lambda esistono dal 1930 e sono dovute al merito del Matemoatico Alonzo Church. Si basano sul lettore lambda
=>
che letteralmente significa vai a. Il lato sinistro dell’operatore lambda specifica i parametri di input se presenti e il lato destro coniente l’espressione o il blogcco di istruzioni, facciamo subito un esempio pratico. L’espressione lambda
x => x * x
si legge x fino a x per x
facciamo un esempio chiarificatore di quanto queste espressioni semplifichino la vita del programmatore supponiamo di avere in cs i seguenti tre delegate
delegate int Sum( int a , int b);
delegate T MyFunc <T> (T a, T b);
delegate void InvokeMethod();
se si volesse aggiungere la somma di due valori a questo punto in cs dovremmo fare
Sum sd0= new Sum (CalcSum);
sd0=CalcSum;
int val =sd0(4,5);
private int CalcSum (int a, int b)
{
return a+b; 3:;
}
e grazie appunto l’introduzione dei Lambda il tutto diventa riassumibile come
Sum sd0= (int a, int b) => { return a+b;
}
Expression Tree
Una lambda espression viene definita attraverso le Expression Tree cioe’ le classi Expression <T> , vediamo subito come attraverso un esempio
Ripartiamo dall’esempio fatto sopra
Sum sd0= (a,b) => (a+b);
Per utilizzarla attraverso le expression tree il codice diventa
Expression<Func<int, int, int>> expression =(a,b) => a+bM
ret =expression.Compile()(4,5)
Partial Method
Le partial method di fatto le abbiamo incontrare sempre durante questa nostra esperienza in aspnet e si tratta di uno dei metodi piu’ vincenti della tecnologia di questo framework
Ossia da Aspnet 2.0 in poi è possibile separare in fiel diversi l’implementazione di una classe marcandola per l’appunto con l’attributo partial in questo modo avremmo due classi con lo stesso nome che vengono lette dal complilatore come un’unica classe, alleggerendo cosi’ la complessità per il programmatore, guardiamo subito come:
partial class Cliente {
string _name;
string Name
{
get {
return_name;;
}
set {_name= value;
}
}
Dopo possiamo tranquillamente aggiungere altre informazioni in un altro file
partial class Cliente {
string GetXYZ {
Codice aggiuntivo
}
}